最近公司打算使用git代替之前的svn版本控制工具,趁此机会打算好好学学git,这个号称当今世界最牛的分布式版本控制工具。
一、【git和svn的主要区别】
1、去中心化 svn以及微软的TFS均采用中心服务器架构,即所有的提交、获取都需要与中心服务器交互。如果开发人数较多会导致中心服务器流量压力大,并且一旦中心服务器挂掉(之前公司使用TFS中心服务器硬盘坏掉),所有的提交记录、稳定版本代码等均存在丢失的风险。而git采取分布式架构,即所有开发者服务器上均存在完整的本地仓库,则不存在这些问题。
2、本地独立使用 使用git可以进行本地提交/撤销,即没有中心服务器一样可以进行完整的版本控制;而svn则必须存在可用的中心服务器才能使用。
3、集成式提交 刚接触git时可能对git add命令有些难以理解,因为使用svn时并没有这一中间环节,每次进行提交时都必须对修改的文档进行add操作会觉得麻烦。但使用习惯之后便会由心的接受这一步骤,因为它有许多的好处。当我们使用svn进行大功能开发时,每完成一个单独的小模块时都会很想提交,但若提交到服务器则可能会影响别的开发人员,因为该功能的开发并未完成,此时svn则无法对我们本地正在开发的代码进行有效的控制。而使用git则可以每完成一个小步骤,就进行add提交到暂存区,并随时可以在此基础上进行撤销等操作;通过集成这样的细粒度暂存区提交,让我们对本地仓库进行真正提交时有更好的备注说明,以便后期对版本历史进行追踪。
4、便捷的分布式开发 使用git后你会发现原来在公司和在宿舍一样开发。特别对于一些工作之余开发的个人小项目,既会在公司进行开发,亦可能在宿舍进行修改,使用git可以进行方便同步的分布式开发,即使偶尔没有网络。同时,使用如github/oschina这样的免费代码托管网站会使这一过程变得简单自然。
5、不同存储区域 git不同于svn将所有的版本数据都放在中心服务器【远程仓库】,而在本地也存在所有提交的版本数据【本地仓库】,并且还存在一个【暂存区】版本存储区域,它可以在未正式提交到【本地仓库】时,暂存下我们当前版本的修改【工作区的修改】。
二、【msysgit (git for windows)的安装】
通过http://msysgit.github.io/获取最新版本的git安装包,其自带git bash命令式交互与简单的GUI交互界面。下载后傻瓜式安装,根据提示进行选择性安装,若不习惯使用msysgit自带的GUI,可以选择不加入右键菜单。习惯windows交互界面的可自行安装source tree,通用的git客户端界面管理工具。
三、【git bash基础命令】
安装好msysgit后,使用window自带资源文件管理器进入需要进行版本控制的目录,就可以正式开始使用git对咱们的项目进行版本控制了。下面按照一般使用顺序介绍git bash日常使用中会用到一些命令:
- git config --global user.name "your name" 设置全局提交代码人的名称
- git config --global user.email "your email" 设置全局提交代码人的邮件地址
- git init 将当前目录初始化为git仓库 (成功初始化git仓库后会在当前目录生成.git隐藏文件夹,里面存放了版本数据以及各种git配置数据,并会将当前目录、所属子目录纳入版本控制范围)
- git status 查看当前git仓库代码/文件的状态,在每次提交时都可以使用该命令查看修改状态
- git add . 添加当前目录所有文件到暂存区 (暂时忽略已添加的多余的文件)
- git commit -m "提交说明" 提交到本地仓库的备注,以便后期进行版本追踪
到此为止,第一次初始化git仓库并向其提交一次修改就结束了。当然这只是一个顺利的开始,但我们在实际工作中可能会遇到更多的问题,比如撤销、比较、推送、获取等,在此就不能根据顺序一一介绍了。常用的操作命令请参见附录。
四、【git bash使用代码比较/合并工具Beyond Compare】
在git日常使用中,我们难免会在提交前、审核代码时,比较本次提交代码的具体修改。使用git diff命令只能在当前命令窗口查看,并不能很好的体现代码的具体修改。而相信使用过文本比较工具如 Beyond Compare的童鞋都会更想使用友好的第三方专业文本比较工具来进行这项工作。
下面简单介绍如何配置git使用Beyond Compare 4来进行代码比较与合并,其中Beyond Compare 4的路径为默认安装路径:
在配置了git全局代码提交人名称之后,git会自动将其配置存放在当【系统前用户目录】下的.gitconfig文件中,而我们只需要打开这个文件,并在其中追加文本:
[diff] tool = bc4
[difftool] prompt = false
[difftool "bc4"]
cmd = "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
[merge] tool = bc
[mergetool] prompt = false
[mergetool "bc4"]
cmd = "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""
现在,我们便可以在提交代码前,使用命令git difftool来对工作区和暂存区的代码进行友好的比较了。
由于时间关系,本文先介绍到此,若有机会将后续将分享使用git进行团队开发中的一些问题与解决方案
五、【附录】常用git命令
初始化:
git clone 远端仓库地址 (克隆远端项目)
git init (将当前路径设为git仓库)
git config --global core.excludesfile "file" (配置全局忽略文件)
git config -l (查看全局配置)
提交修改到暂存区:
git add . (将当前路径所有文档添加到暂存区, 初始化仓库时使用)
git add -A (推荐使用, 将所有新增、修改和删除的进行标记)
撤销暂存区修改
git reset <HEAD> fileName (丢弃[暂存区]的修改)
git reset . 取消所有add文件(丢弃暂存区的修改)
git reset --hard commit_id
撤销工作区修改
git checkout -- file (丢弃[工作区]的修改)
git checkout . 撤销所有工作区修改
删除暂存区文件
git rm --cached <file> add之后, 取消add部分文件
比较(使用比较工具)
git difftool 比较当前工作区与暂存区之间的区别
git difftool <版本号1> <版本号2> <file> 比较文档不同版本号
查看历史
git log <file> 查看某文档的历史版本(之后按end光标跳到最后,s键生成log记录文档,q退出)
分支操作:
git branch 分支名 (创建分支)
git checkout 分支名 (切换到分支)
git checkout -b "name" 创建并切换至分支
其他
git push 远端名 分支名 (将本地当前分支推送到远端)
git pull --rebase origin master(将本地origin/master同步到最新)