使用TortoiseGit+MSysGit+Github进行版本管理

以后准备都用git进行版本管理。看完 http://progit.org/book/zh/ 的1~3章, 基本就对Git有了初步的理解,接下来,就是实战了。

以后准备都用git进行版本管理。看完 http://progit.org/book/zh/ 的1~3章, 基本就对Git有了初步的理解,接下来,就是实战了。

虽然命令行敲起来很带感,但我更喜欢乌龟svn界面的直观,于是google之,发现竟然有乌龟git(http://code.google.com/p/tortoisegit/),赶紧下载安装。结果不行,反复尝试后发现TortoiseGit只是个壳,封装命令行操作,实际还需要常规的Git工具——MSysGit。

按照教程中的地址(http://code.google.com/p/msysgit/),下载MSysGit并安装。可能因为我用win7的关系,并没有像有些教程上说的那样,安装完成后自动设置,乌龟git还是不能用。

于是我继续边google边尝试,发现Settings->General->MSysGit的设置很重要,修改Git.exe为“/msysgit/bin”后(比如我的是D:\msysgit\msysgit\bin),Extern dll会被自动填充,这个时候点下“check now”,就能看到版本号了。此时TortoiseGit和MSysGit就算安装并配置完成了。

找到以前的项目,导出到新文件夹,然后右键点击,选择“Create a Repon here”,一个Git仓库就被建立了。接下来就可以进行版本管里了,操作和概念都与SVN非常相似。

接下来要做的就是在Github上托管代码。关于开源自己的项目,我是这么看的:

  1. 严格意义上说,这样做有违与公司签订的保密协议,有可能造成核心代码外泄等问题。
  2. 但是,泡泡明明就偷了我的播放器代码,还把我的个人信息改成李想(罪证),如此恶劣的举动公司也没啥动静,说明其实公司对非核心产品并不在意。
  3. 在github或者google code上浩如烟海的开源代码当中,指望自己的程序如此出彩,会被别人看到用到,几率小得可怜,差不多与求之而不得。
  4. 基于平日的开发工作量和项目周期,各种不健康的临时代码、为应对某一特殊情况或bug的代码层出不穷,有人愿意用愿意改才稀罕……
  5. 托管的代码可以遵守某开源协议,避免别人商用化,可以降低损失。
  6. 通过云平台可以在不同设备间同步代码;而且,LinkedIn这种网站是支持Github嵌入的,某些公司也开始看重求职者的代码表现,所以,开源自己的项目,我认为是利大于弊的。

说了些废话,开始进入正题。首先进入http://www.github.com/,注册登录。然后点击右下角的”New Repository“创建一个仓库,如图。

github仓库列表

创建的仓库都会出现在这个列表中,包括从别人项目中分支出来的。然后点击仓库即可进入项目综述页(按ZOL的习惯),那些功能暂时不提,我们还需要一些设置。

Puttygen

先把Github放一边。安装TortoiseGit时,它自动帮我们安装了一些小工具,这里要用到的就是上图Puttygen。为了安全等因素,我们可能需要对身份做验证,Puttygen可以帮我们生成加密Key。

打开Puttygen,点击“Generate”,然后不停在空白区域(图中文字区域)内晃动鼠标,进度条走到头后就会显示出刚才随机生成的一组验证key(这个操作总让我想起Illustration出品的某款游戏……),点击“Save private key”将这个key保存成一个ppk文件,记住它的位置。

打开TortoiseGit -> settings -> Git -> config,在其中填上自己的Name和Email,这些是用来在项目中区分作者和提交者的。顺便把下面俩也勾上,我暂时还不知道它们是干嘛用的。然后回到Github。

Github个人信息

点击右上角个人信息中的“Account Settings”设置帐户属性。在“SSH Public Keys”的选项卡里,点击“Add another public key”来添加刚刚生成的key(那一大段文字,key的title无所谓,自己能看懂就行)。

接下来打开要push到远程服务器的代码,右键 -> TortoiseGit -> push,第一次推送,点击“Manage”,在remote中输入用来记忆的名字,url中输入ssh地址(git开头),Putty选择刚才保存的key文件。确定回到刚才窗口。在Remote中选择刚才建立的链接,提交即可。如是,将代码托管到Github上的操作完毕。

PS:我发现,在Git中,每个项目是一个完整的仓库,pull/fetch/push都是基于仓库整体的,这点和SVN中不同,在SVN中我可以只update或commit某一特定目录,git一搞就是整个项目目录。

作者: meathill

爱编程,爱旅游,爱吐槽。
今年的第一目标是成为一名优秀的讲师,做够 25 场直播,收集 1000 位听众! (12/25)
《Electron + Vue 实战开发》创作中……

《使用TortoiseGit+MSysGit+Github进行版本管理》有3个想法

欢迎吐槽,请勿装死