火龙果·整理 uml.org.cn 6第2章版本控制Git和代码审阅Gerrit .Git main repository Peter's repo git commi 图2.1:Git分布式版本控制 2.3 Gt基本用法 Gt的学习曲线相对来说还是有点陡的,但只要掌握了基本的一些命令,开始日常的工 作就没有问题了。 2.3.1安装 先装好Windows版的Git(“Git for windows”),很多人老是说装msysgit,实际上我 们要的只是Git的工作环境,而msysgitz是一个含有整套源码环境的系统(如C编译器)完整 包,除非你是个Gt极客,否者别自寻麻烦。 缺省安装就可以了,除非你是专家,否则别选Putty(一种常用的远端控制台软件)的 SSH。初学者80%的Git的问题出在SSH连接上。 2.3.2配置Git 首先要告诉Gt你是谁,怎么联系你,这样在代码库中才能找到提交者;同时界面也可 设置成彩色来方便阅读。在SHELL环境下进行如下全局配置: git config--global user.name "Your name" git config--global user.email "Your email address" git config--global color.ui auto -globalz就是把全局配置放在你的OME下~/.gitconfig,下面两条命令都可看到全局 定义。 less ~/.gitconfig git config -1--global
6 第2章 版本控制Git和代码审阅Gerrit 图 2.1: Git分布式版本控制 2.3 Git基本用法 Git的学习曲线相对来说还是有点陡的,但只要掌握了基本的一些命令,开始日常的工 作就没有问题了。 2.3.1 安装 先装好Windows版的Git(“Git for windows”),很多人老是说装msysgit,实际上我 们要的只是Git的工作环境,而msysgit是一个含有整套源码环境的系统(如C编译器)完整 包,除非你是个Git极客,否者别自寻麻烦。 缺省安装就可以了,除非你是专家,否则别选Putty(一种常用的远端控制台软件)的 SSH。初学者80%的Git的问题出在SSH连接上。 2.3.2 配置 Git 首先要告诉Git你是谁,怎么联系你,这样在代码库中才能找到提交者;同时界面也可 设置成彩色来方便阅读。在SHELL环境下进行如下全局配置: $ git config --global user.name "Your name" $ git config --global user.email "Your email address" $ git config --global color.ui auto --global就是把全局配置放在你的HOME下 ~/.gitconfig,下面两条命令都可看到全局 定义。 $ less ~/.gitconfig $ git config -l --global
火龙果·整理 uml.org.cn 2.3节Git基本用法 2.3.3建立本地Git仓库 既然是分布式,就可以直接在本地创建Git仓库了。先生成一个千净目录helloworld并 初始化成Git仓库。 cd- mkdir helloworld cd helloworld $git init#初始化本地仓库 Initialized empty Git repository in c:/Users/larrycai/helloworld/.git/ 养成习惯经常看看目录下有什么变化了。 find. ./.git ./.git/config ./.git/hooks ./.git/hooks/update.sample ./.git/info ./.git/objects ./.git/refs ./.git/refs/heads ./.git/refs/tags 你会发现新建了.gt目录,在下面还有很多东西,自己瞅瞅,琢磨琢磨,这也是平时自 我提高的一个办法。不管怎样,这就是你的本地Gt仓库了。 2.3.4第一个提交 然后可以试着加入一些代码并签入本地版本库。 $cat"Hello6 it World">README#建一个空文件 $git status#会发现报告红色的未跟踪的文件 $touch README#创建空文件 $git add README#加入暂存(stage)区 $git status&find·:变绿色,跟踪了。产生一个索引 $git commit-am"add first empty file”#签入代码到本地,要养成好习惯写好提交的注释。 $git status&find.#干净了,索引变化了。 git log $git blame:查看谁改的 要细心体会每次的变化,就这么简单,也不那么容易。 2.3.5Git分支(Branch)和合并(Merge) 为了不影响团队其他成员的开发,常常建立一个分支(Branch)用来开发新功能和修改 bug,等开发完成后,再合并(merge)到主分支(master)上供其他人使用
2.3节 Git基本用法 7 2.3.3 建立本地 Git 仓库 既然是分布式,就可以直接在本地创建Git仓库了。先生成一个干净目录helloworld并 初始化成Git仓库。 $ cd ~ $ mkdir helloworld $ cd helloworld $ git init # 初始化本地仓库 Initialized empty Git repository in c:/Users/larrycai/helloworld/.git/ 养成习惯经常看看目录下有什么变化了。 $ find . . ./.git ./.git/config ./.git/hooks ... ./.git/hooks/update.sample ./.git/info ./.git/objects ./.git/refs ./.git/refs/heads ./.git/refs/tags 你会发现新建了.git目录,在下面还有很多东西,自己瞅瞅,琢磨琢磨,这也是平时自 我提高的一个办法。不管怎样,这就是你的本地Git仓库了。 2.3.4 第一个提交 然后可以试着加入一些代码并签入本地版本库。 $ cat "Hello Git World" > README # 建一个空文件 $ git status # 会发现报告红色的未跟踪的文件 $ touch README # 创建空文件 $ git add README # 加入暂存(stage)区 $ git status & find . # 变绿色,跟踪了。产生一个索引 $ git commit -am "add first empty file” # 签入代码到本地,要养成好习惯写好提交的注释。 $ git status & find . # 干净了,索引变化了。 $ git log $ git blame # 查看谁改的 要细心体会每次的变化,就这么简单,也不那么容易。 2.3.5 Git分支(Branch)和合并(Merge) 为了不影响团队其他成员的开发,常常建立一个分支(Branch)用来开发新功能和修改 bug,等开发完成后,再合并(merge)到主分支(master)上供其他人使用
火龙果·整理 uml.org.cn 8第2章版本控制Git和代码审阅Gerrit 分支和合并在其他大多数的版本控制系统中(如SN,ClearCase)都是高级课程,而在 Gt中,一会儿就学到了。记住,在分布式版本控制系统中,这是一种很常用的工作方式。 一个Git仓库可以维护很多开发分支并快速切换,这是推荐的工作方式,而在SN中,分 支是尽量避免的。 $git branch bug123#创建关于bug123的分支 $git branch#看看有哪些分支,master是主分支。 bug123 *master $git checkout bug123#切换到bug123分支。 Switched to branch'bug123' $git checkout-b feature.234#创建并直接切换到feature.234分支 当需要合并时,切换到需要合并的分支上,如果需要,可以使用kdi等软件。 $git checkout master#切换到主分支 $git merge bug123#bug123已解决,合并bug123 $git branch-dbug123#bug123没用了,可以册除这个分支了。 2.3.6Git变基(Rebase)### 在两个分支之间同步的操作除了合并,还有一个类似的命令叫变基(rebase)。它就是 把你的分支重新更新到新的基础之上。 git checkout master $git checkout-bbug123:从主分支工作在bug123分支上 $git rebase master:变基到最新的主分支的内容,继续修改bug123 2.3.7Git标记(Tag)### 般在发布前,我们需要打一个标记(Tg),表明这是一个重要的点,以后可以很方 便地把当前的状态恢复,省得记录某个固定的签入了。 $git tag-av1.0.0-m"official release for version1.0.0"#创建里程碑并加注释 $git tag#列出所有的里程碑 $git checkout v1.0.0#以后可以很方便地签出里程碑v1.0.0 2.4 Git远程仓库连接 到现在为止,我们一直在本地练习,该把代码上传到Gt服务器了。Git服务器有好几 种,如Gitolite、Gerrit。企业建议用Gerrit。 Gerrit,是基于SsH协议用Java实现的Git服务器,谷歌Android开源项目就是使用Ger- rit
8 第2章 版本控制Git和代码审阅Gerrit 分支和合并在其他大多数的版本控制系统中(如SVN,ClearCase)都是高级课程,而在 Git中,一会儿就学到了。记住,在分布式版本控制系统中,这是一种很常用的工作方式。 一个Git仓库可以维护很多开发分支并快速切换,这是推荐的工作方式,而在SVN中,分 支是尽量避免的。 $ git branch bug123 #创建关于 bug 123的分支 $ git branch # 看看有哪些分支,master是主分支。 bug123 * master $ git checkout bug123 # 切换到bug123分支。 Switched to branch 'bug123' $ git checkout -b feature234 # 创建并直接切换到feature234分支 当需要合并时,切换到需要合并的分支上,如果需要,可以使用kdiff等软件。 $ git checkout master # 切换到主分支 $ git merge bug123 # bug123已解决,合并bug123 $ git branch -d bug123 # bug123没用了,可以删除这个分支了。 2.3.6 Git变基(Rebase)### 在两个分支之间同步的操作除了合并,还有一个类似的命令叫变基(rebase)。它就是 把你的分支重新更新到新的基础之上。 $ git checkout master $ git checkout -b bug123 # 从主分支工作在bug123分支上 $ git rebase master # 变基到最新的主分支的内容,继续修改bug123 2.3.7 Git标记(Tag)### 一般在发布前,我们需要打一个标记(Tag),表明这是一个重要的点,以后可以很方 便地把当前的状态恢复,省得记录某个固定的签入了。 $ git tag -a v1.0.0 -m "official release for version 1.0.0" # 创建里程碑并加注释 $ git tag # 列出所有的里程碑 $ git checkout v1.0.0 # 以后可以很方便地签出里程碑 v1.0.0 2.4 Git远程仓库连接 到现在为止,我们一直在本地练习,该把代码上传到Git服务器了。Git服务器有好几 种,如Gitolite、Gerrit。企业建议用Gerrit。 Gerrit是基于SSH协议用Java实现的Git服务器,谷歌Android开源项目就是使用Gerrit