Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1172548
  • 博文数量: 312
  • 博客积分: 12522
  • 博客等级: 上将
  • 技术积分: 3376
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 18:35
文章分类

全部博文(312)

文章存档

2016年(3)

2015年(1)

2013年(1)

2012年(28)

2011年(101)

2010年(72)

2009年(13)

2008年(93)

分类: 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

 

在你的本机配置gitrepo

 

在这个练习中,我们将在你的本机上配置gitrepo环境。包括具体的用户设置(.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

你也可以设置为其他你喜欢的编辑器,emacsnano

 

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

ls命令查看是否把所有的库都下载下来了(可以和.repo/manifest.xml文件中的project项对比)。
 

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 cleangit 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

gitkgitk --all有什么区别?

                                                                                                                                 

5、  gitk就像git loggit diff一样,能够显示指定文件和目录的历史信息。

同时,你可以指定你想知道的两次提交之间的区别。

            用这样的格式:REF1..REF2REF(reference)可以是一个分支,一个标记或一个SHA-1值。你可以把它理解成“从REF1REF2

我们可以执行下面的命令看看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来连接到Gerritreview你的修改。

 

步骤2:上传一个新的修改到一个已经存在的Gerritt提交上。

1、进入目录~/exercises/exercise-4

2、打开文件fix_commit_for_this.txt并且修改一些内容。

3、现在我们想把这次修改添加到一个包含上次修改的提交中。先运行git add来加入你的文件,然后运行下面的命令来使它包含到上次的修改中:

$ git commit --amend

4、检查你的修改,可以运行命令git loggit diff去检查。

5、现在你希望把你的修改过的提交作为一个新的修改uploadGerrit上,这可以用--replace参数在实现:

$ repo upload --replace .

注意,括号中的数字是你的change id,如果change id丢了或是错误的,你需要填上或改正它。

6、在Gerrit中检查你的修改。

7、把你的修改设为Abandon。这里我们只是做练习,设置为Abandon状态并不是一个必须的步骤。

 

 

阅读(1766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~