求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
   
分享到
使用Git进行小项目代码管理
 

发布于2012-6-15

 

之前在公司使用过SVN(无甚感觉)和ClearCase(把人恶心死的东西)两种版本控制工具,都不满意。后来想自己写点东西玩,就发现了这个在国内人气还不怎么高的Git,这个由Linus实现的灵活小巧的VCS。对它的印象差不多可以这么说:“我被萌到了”。

通过采用不同类型的工作流,Git可以适用于各种大小规模的项目。这里介绍一下针对最简单的集中式工作流的配置方式,适合个人和小型团队使用。

注:本文只是一个快速流程,要详细了解Git使用方法的话,强烈推荐阅读《Pro Git》这本书(见本文末尾的参考)。流程中需要一台服务器或VPS(越来越感受到VPS这东西对程序员真有用啊)。

安装Git

Git是跨平台的,在Linux/Mac/Windows上都可以使用,它的分布式特性也使得个人可以在多种平台下方便地进行开发。

Linux

作为桌面系统用的Linux大多是Debian系的,安装很方便,执行下面命令即可:

 
$ sudo apt-get install git-core

Mac OS X

如果安装了Xcode 4的,里面就已经包含了Git。也可以从这里单独安装:http://code.google.com/p/git-osx-installer/downloads/list?can=3

Windows

window平台可以安装msysgit: http://code.google.com/p/msysgit/downloads/list?can=3

喜欢图形界面的可以再加上TortoiseGit:http://code.google.com/p/tortoisegit/downloads/list

初次配置

执行下面两条命令来配置用户信息,他们会用于Git提交时的签名:

 
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com 

建立本地Git仓库

在你的项目目录下执行:

$ git init

这会在你的项目目录下建立一个.git目录,存储所有Git所需的资源。

然后我们该往项目中添加文件了。不过在这之前,最好先建立一个名为.gitignore的文件,来把一些不需要的文件或文件夹排除掉。比如在Mac下有时会在当前目录下产生一个.DS_Store的文件,这对我们的项目是无用的,我们就可以把它排除掉,而一些文本编辑器会使用以~结尾的备份文件,也要排除掉:

 
.DS_Store
*~

《Pro Git》的2.2节对此规则有更详细的介绍。

然后我们就可以进行文档的添加了,如果是按照上面把忽略规则设定好了的话,可以简单地执行:

$ git add .

这会把忽略规则以外的所有文件都添加进来,也可以这样:

$ git add *.c

来添加部分文件。Git还可能会忽略.gitignore文件,需要手工添加:

$ git add .gitignore

添加好文件后,就进行第一次提交:

$ git commit -m 'initial project version'

Git要求所有地提交都要包含说明文字,-m后面地即为说明,这是一种快捷地做法,也可以只用git commit,然后在切换到的界面中编辑说明文字。

建立服务器端

Git是分布式的版本管理软件,不需要服务器端也可以使用,但若要进行多人/多设备协同开发,还是要架设一个服务器端。
首先把刚才建好的本地仓库导出为裸仓库,在项目的上级目录执行:

$ git clone --bare my_project my_project.git

这会新建一个my_project.git文件夹,差不多和项目目录.git文件夹中的内容一样。

使用scp命令(或其他方式)把它上传到你的服务器上:

$ scp -r my_project.git user@git.example.com:/var/git

服务器上存放的目录可以是任意位置,目录的访问权限其实就和通过Git访问的权限相同(使用ssh协议来访问代码),比如你的项目是私人的,就可以放在你的home目录中。

上传之后本地的my_project.git就可以删掉了。

如果你的服务器端还没有安装git的话,这时是无法通过Git获取代码的,很简单,还是通过

$ sudo apt-get install git-core

命令,在服务器端安装Git。

现在就可以在本地通过Git来获取这个项目了:

$ git clone user@git.example.com:/var/git/my_project.git

这会在当前目录下建立一个my_project文件夹,里面包含项目源码和git仓库。也可以在上面的命令后再添加一个参数,来制定这个文件夹的位置和名称。

本地仓库和服务器端的关联

我们通过git clone命令抓下来的项目会自动和抓取的服务器端关联好,这样如果你确保前面添加到库中的文件没有遗漏,就可以把它删掉,再新clone下来的项目目录下进行开发(这样最简单最懒)。

也可以手工为原项目建立关联,在最初的项目目录中执行:

$ git remote add origin user@git.example.com:/var/git/my_project.git

这条命令就是把刚才做好的服务器端仓库添加为远程仓库,名字叫origin。

这时已经可以通过git fetch origin和git push origin master命令来抓取和推送代码了,但这样会比较麻烦(git fetch不会自动将远端分支合并到当前工作的分支)。

为了之后的使用方便,要设置本地的master分支跟踪远程仓库的master分支:

$ git checkout --track origin/master

$ git checkout --set-upstream master origin/master

这条命令即让本地master分支跟踪远程仓库origin中的master分支。

设置好更总后如果我们需要从远程仓库抓取数据,只需要运行

$ git pull

即可。而本地数据变动后,要提交到远程仓库,则执行:

$ git push

使用git部署网站

以前写好了网页就用ftp工具上传到服务器上,这样子没有版本控制的发布行为可能会导致很多问题。既然现在我们用git来管理项目,那也可以用它来发布网站。

假设刚才我们的my_project是为sojingle.net做的网站,要放在服务器的/var/www/sojingle.net/htdocs/www目录下,则可以在服务器端执行

$ git clone user@git.example.com:/var/git/my_project.git /var/www/sojingle.net/htdocs/www

如果网站和git服务器在同一个主机的话,也可以使用本地文件协议来抓取:

$ git clone /var/git/my_project.git /var/www/sojingle.net/htdocs/www

不止是网站,有些软件也是通过这种方式来发布。比如Homebrew和RVM,在更新本地软件时,就是利用git来更新。

新建develop分支

Git除了分布式这一大特性外,还大大强化了分支的使用。我们日常的开发工作一般不在master分支上进行,而是最好建立一个develop分支:

$ git checkout -b develop

开发时,最好基于develop分支再新建一个特性分支,比如我们要为网站添加一个新功能“标签支持”,就为其新建一个分支tag_support,新功能开发完成之后,将其合并到develop分支上:

$ git checkout develop $ git merge tag_support

这就将新功能的代码合并到了开发主分支上,合并过程没有冲突的话,就可以删掉这个分支:

$ git branch -d tag_support

当做好了一组新功能,决定要发版本了,就用可以把develop分支合并到master分支上,git push推送到远程仓库。在服务器端的www目录中,再来执行git pull,即可把网站更新到最新版本。

推荐及参考

《Pro Git》 http://progit.org/book/zh/

这本书的作者是GitHub的员工,写得非常棒,大量的配图把Git的分支管理讲得非常清楚。而且非纸质书是免费的,已经有了中文版翻译,可以直接在线阅读。

《Git开发管理之道》 http://blog.leezhong.com/translate/2010/10/30/a-successful-git-branch.html

这篇文章主要讲的是软件开发中的分支管理模型,很值得一读。


相关文章

每日构建解决方案
如何制定有效的配置管理流程
配置管理主要活动及实现方法
构建管理入门
相关文档

配置管理流程
配置管理白皮书
CM09_C配置管理标准
使用SVN进行版本控制
相关课程

配置管理实践
配置管理方法、工具与应用
多层次集成配置管理
产品发布管理
   


软件配置管理的问题、目的
软件配置管理规范
CQWeb 7.1性能测试与调优指南
为什么需要使用ClearCase
ClearCase与RTC的集成
利用ClearQuest 进行测试管理
更多...   


产品发布管理
配置管理方法、实践、工具
多层次集成配置管理
使用CC与CQ进行项目实践
CVS与配置管理
Subversion管理员


配置管理实践(从组织级到项目级)
通号院 配置管理规范与应用
配置管理日构建及持续集成
丹佛斯 ClearCase与配置管理
中国移动 软件配置管理
中国银行 软件配置管理
天津华翼蓝天科技 配置管理与Pvcs