之前在公司使用过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
这篇文章主要讲的是软件开发中的分支管理模型,很值得一读。
相关推荐
介绍windows下如何使用git管理程序源码,远程数据仓库为在本地的裸仓库。
Linux内核开发:使用Git管理源代码Git 是 Linux Torvalds 为了帮助管理 Linux:registered: 内核开发而开发的一个开放源码的版本控制软件。我们可以自己下载这个软件用于对内核的 hack 分析,或者用来管理自己的软件...
项目中git代码仓库协作流程、项目中git代码仓库协作流程
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。[1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git...
将 vs 创建的项目,通过上传到 Git上,进行源代码管理
关于git项目管理分支说明。 2.1. master主干 命名:master 说明:发布分支 master为程序主干目录,开发新需求需从master打新分支,开发完成合并回master发测试包,测试完成需打新的tag包,tag包申请上线发布 2.2. ...
也许它是一个第三方开发的Git 库, 比如公司内部自己开发的公用代码库, 并在多个父项目中使用的。这个场景下,常见的问题产生了:你想将两个项目单独处理, 但是又需要在其中一个中, 使用另外一个。 在Git 中, 可以用...
• 从高通或google下载代码是通过repo下载的,是由repo管理的266个git组成的 • l现在使用的git库是将由repo管理266个小git合并成一个git库导入 • 目前导入的repo是将项目定制化的内容取出,拆成由repo管理45个小...
使用Git进行配置管理,可有效解决代 码冲突、事务并发、文档冗余等问题,实现对项目的高效管理,也可保证版本的可溯性,有针对性地解决源代码混乱的问题。结 果表明:应用Git的配置管理方法充分利用了Git的优点,...
git常用命令,嵌入式开发过程中,也经常使用git进行版本管理,根据项目需求对git的使用程度不一样。这里介绍一种,git的简单使用,可以满足大部分的嵌入式开发,可以说嵌入式开发使用git后,可以基本拜托掉之前的的...
该资源含有Git的最新安装包,如何使用Git和Coding管理项目的详细教程(手把手教),一目了然
极客出品——代码管理工具Git工具教程。 Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。本教程是史上最 浅显易懂的 Git 教程,能够帮助读者迅速掌握并上手操作 Git 命令...
而Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,是一款非常棒的工具。 目标平台 该项目的目标是希望它能够在每一个平台上运行,包括: ChromeOS App Firefox OS ...
git是“分布式“管理方式,开放人员的每台计算机上都有一个“版本控制器”,每个开发人员把自己开发的模块的代码都上传到github上(充当一个远程仓库,类似与“中转站”的作用),其他人可以从github上下载相应的代码...
eclipse本地开发代码通过git库管理;导入java项目如何修改为web项目
Gerrit代码审查工具是一个基于Git项目的代码审查和项目管理工具。 Gerrit允许任何授权用户向主Git存储库提交更改,从而简化了基于Git的项目维护,而不是要求所有已批准的更改由项目维护者手动合并。 Gerrit利用网页...
项目创建Develop分支来储存开发代码,master分支来储存当前代码,每个成员创建自己的个人分支。 在自己个人分支上开发,在自己分支-bugfix分支上修改bug。 快捷键自动保存,并执行git远程同步。快捷键自动同步大家...
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git...
使用Nacos配置中心,可以简化对SpringBoot项目中的配置,更容易管理配置文件 Git是用于将本地代码上传到仓库的一种工具,在idea中配置git,可以方便的将本地代码上传到中央仓库,在团队开发中是一个必备的技能