分类: IT业界
2011-10-17 17:16:56
说明:
本文使用了不同的字体来表示不同类型的文字:
输出:output
输入:input
替换:replaced
一些特殊的符号:
$ 表示shell提示符
[text] 表示文字“text”是可选的,你可以输也可以不输
一些典型的例子:
$ git --version
git version 1.7.1
$ echo Insert your text [here]
Insert your text here
访问练习git库的方法:
服务器:code.thunderst.com (192.168.9.142)
用户:exercise
密码:123456
注:git使用密码访问没有问题,但是使用repo sync下载代码时会要求输入很多次密码,因为每个git库都会要求输入密码。这里我们提供一个简单的方法(在你的机器上操作):
1、建立一个新用户(比如叫test)
$ sudo useradd -m test
2、切换到该用户
$ sudo su - test
3、把服务器上的exercise用户目录下的.ssh目录拷贝过来
$ scp -r exercise@192.168.9.142:.ssh .
4、测试连接服务器是否不需要密码了
$ ssh exercise@192.168.9.142
如何不需要密码就可以连接上服务器就说明配置已经成功了,你在做下面的练习的时候就不需要输密码了。
练习1:
在你的本机配置git和repo
在这个练习中,我们将在你的本机上配置git和repo环境。包括具体的用户设置(.gitconfig文件)和gerrit的设置。我们也会下载练习的git库。
步骤1:在~/.gitconfig文件中设置用户名和邮件地址。
1、 打开一个终端,运行下面的命令(你可能需要替换一些变量为你希望的值,下同):
$ git config --global user.name "FirstName Lastname"
$ git config --global user.email (eg: git config --global user.email scm@thunderst.com)
2、 配置你的默认编辑器(设置为vim)
$ git config --global core.editor vim
你也可以设置为其他你喜欢的编辑器,emacs或nano
3、配置git的颜色
$ git config --global color.ui auto
3、 检查你的设置
$ cat ~/.gitconfig
你应该看到类似下面的内容:
[user]
name = Firstname Lastname
email =
[color]
ui = auto
[core]
editor = vim
步骤2:使用repo下载git库。
1、 创建一个exercises的目录:
$ mkdir ~/exercises
2、 进入~/exercises目录
3、 用repo下载练习git库:
$ repo init –u exercise@code.thunderst.com:manifest.git
$ repo sync
4、用repo start命令将所有git库切换到正确的分支上:
$ repo start test --all
5、检查分支是否切换正确:
$ repo branches
* test | in all projects
练习2:
在这个练习中,我们主要关注如何恢复(reset)你的工作目录(working directory)和索引(index)。这在出问题后我们想重新开始的时候是很有用的。我们将实践增加和删除文件。
在做练习之前,需要对git库做一些准备工作,请进入scripts目录执行exercises.sh脚本。
练习2a
创建一个新文件并暂存到index中。同时从index中取消暂存。
1、 进入代码目录,例如~/exercises/exercise-2a/
2、 用编辑器创建一个新文件,保存成newfile.txt
3、 用git status命令查看状态。你的文件现在在上图中的哪个状态下?
4、现在运行git add newfile.txt
5、再运行git status命令查看状态。你的工作目录下发生了什么变化?这次你的文件在上图中的哪个状态下?
6、现在,我们尝试取消暂存状态。运行命令:
$ git reset -- newfile.txt
这次你的文件在上图中的哪个状态下?
提示:如果运行git reset后面不指定具体的文件,那么所有文件都会被取消暂存。
练习2b
如何恢复所有内容
1、进入~/exercisers/exercise-2b目录。这实际是另外一个git库。如果你运行命令git status,你会发现我们已经准备好了一些文件。
|
Working directory |
Index |
Tracked |
tracked-working_directory_only.txt |
tracked-added_to_index.txt |
Untracked |
untracked-working_directory_only.txt |
untracked-added_to_index.txt |
2、你想取消所有的操作回到上次的提交(HEAD),这可以用命令git clean和git reset –-hard来实现。第一个命令是用来清除所有的编译结果(新生成的)文件的,并且它只会影响这些文件。
3、现在我们运行git clean -f来清除编译结果文件。
4、检查哪些文件被清除了。
5、现在恢复其他的修改到HEAD。
$ git reset –-hard HEAD
6、运行git status检查一下,看看和上表相比它影响了哪些文件?是所有文件吗?
练习3:
在这个练习中,我们会查看git库的历史信息,比较工作目录,index和分支。
步骤1:用git log检查提交日志。
1、 进入目录~/exercises/exercise-3
2、 运行命令git log查看git库的历史信息
$ git log
3、 运行命令git branch查看所有的本地分支,分支名前面有*的表示当前分支。在这个列表中你还可以看到其他的一些分支,现在我们来看看分支feature的历史:
$ git log feature
4、 查看指定文件或目录的历史也是可以的,可以用下面的命令:
$ git log –- file
步骤2:使用git diff来显示提交和提交之间、提交和工作目录之间的修改。
1、 进入~/exercises/exercise-3目录
2、 修改任意一个文件
3、 用命令git diff显示你的工作目录和index中的区别:
$ git diff
1、 把该文件加入到index中
2、 可以用命令git diff –-cached commit来显示暂存在index中的文件和一个指定的提交的区别(如果不指定提交(commit),那么默认是和HEAD比较)
$ git diff --cached
3、 也可以显示分支之间的区别
$ git diff branch1..branch2
现在,试试显示master分支和feature分支的区别。
哪个分支显示的是绿色的行?
哪个分支显示的是红色的行?
7、用命令git reset --hard来回复工作目录和index
步骤3:使用gitk
1、 进入~/exercises/exercise-3目录
2、 切换到feature分支
$ git checkout feature
3、 运行gitk
4、 运行gitk --all
gitk和gitk --all有什么区别?
5、 gitk就像git log和git diff一样,能够显示指定文件和目录的历史信息。
同时,你可以指定你想知道的两次提交之间的区别。
用这样的格式:REF1..REF2,REF(reference)可以是一个分支,一个标记或一个SHA-1值。你可以把它理解成“从REF1到REF2”。
我们可以执行下面的命令看看test文件的修改:
$ gitk REF1..REF2 -- test
你看到了多少次提交?
练习4
在这个练习中,我们将学习如何修改一个作者错误的提交。我们还将把一次修改提交到Gerrit。
步骤1:修改一个作者错误的提交。这里我们已经做好了一个提交。
1、 进入目录~/exercises/exercise-4
2、 执行命令repo upload .,这将提交拟的修改到Gerrit。
当你看到询问是都提交时输入y并且按回车。
你是否看到了错误提示?为什么呢?使用git log来看一下你的提交的日志。
3、在你的提交中,,你需要修改你的提交并且重新做repo upload。这可以用命令git commit --amend来实现。但是为了修改作者(包括邮件地址)你需要使用参数--author。
$ git commit --amend --author=”yourname@companyname.com”
你会发现你上次的提交信息都还在,这是因为这实际上是在重写提交信息。保存退出就可以了,你不需要改写提交信息。
4、用git log来看看提交日志。
5、现在重新执行repo upload命令。
6、你可以通过repo upload给出的URL来连接到Gerrit去review你的修改。
步骤2:上传一个新的修改到一个已经存在的Gerritt提交上。
1、进入目录~/exercises/exercise-4
2、打开文件fix_commit_for_this.txt并且修改一些内容。
3、现在我们想把这次修改添加到一个包含上次修改的提交中。先运行git add来加入你的文件,然后运行下面的命令来使它包含到上次的修改中:
$ git commit --amend
4、检查你的修改,可以运行命令git log和git diff去检查。
5、现在你希望把你的修改过的提交作为一个新的修改upload到Gerrit上,这可以用--replace参数在实现:
$ repo upload --replace .
注意,括号中的数字是你的change id,如果change id丢了或是错误的,你需要填上或改正它。
6、在Gerrit中检查你的修改。
7、把你的修改设为Abandon。这里我们只是做练习,设置为Abandon状态并不是一个必须的步骤。