【翻译】git教程(git tutorial)【一】

3 篇文章 0 订阅
2 篇文章 0 订阅

名称:git教程 (适用于1.5.1及以后版本)

概要(synopsis)git

描述(Description)

这个教程讲解了怎样向git中导入一个新的项目,怎样修改,怎样和其他开发者们共享修改的文件。如果你主要感兴趣的是使用git来获取和分享项目,例如:为了测试最新版本,你可能会更倾向于从git用户手册的前两章开始学习。

首先,请注意,你能获得命令的文档,例如gitlog,使用一下命令:

		$man git-log
或者
		$git help log

使用后者,你能使用你自己选择的查看器,查看git-help来获取更多信息。

这是一个好主意,在做任何操作之前,先通过你的名字和公共邮件地址向git介绍你自己。最简单最直接的方式就是这么做:

		$git config --global user.name "Your Name Comes Here"
		$git config --global user.email you@youdomain.example.com
导入新项目

假设你开始工作的时候有一个源码 project.tar.gz,你可以通过如下操作将它放到git下版本控制:

		$tar xzf project.tar.gz
		$cd project
		git init
git将回复:
		Initalized empty Git repository in .git/
你现在就已经初始化了工作目录,你可能已经注意到了新建了一个“.git”目录

接下来,通过以下命令来给当前文件夹下的所有文件的内容留下快照:

		$git add .
这个快照就被存储到一个被称作“index”的临时暂存区域,你能够通过以下命令将快照内容永久保存到仓库中:
		$git commit
这将出现一个提示信息:
		You've now stored the first version of your project in git
修改

修改一些文件,并将它们的更新内容添加到索引:

		$git add file1 file2 file3
现在你已经准备好去提交了。你可以通过git diff 的--cached 选项来查看你将要提交的内容:
		$git diff --cached
如果没有 --cached选项,git diff 命令将显示你所做过的修改,但是并不添加到索引。你能使用git status命令获得当前状态的概要
		$git status
如果你需要做更加深入的调整,这样做完,然后添加任何最新修改的内容到索引,最后提交你的修改:
		$git commit
这将再次有一个描述修改的提示信息,同时为这个项目记录了一个新的版本

或者,不使用之前的git add,你可以使用:

		$git commit -a
它将自动关注到任何的修改文件,将它们添加到索引,并且提交。这些操作一步完成。

关于提交消息的注释:虽然并没有要求,但是有一个好主意是:在提交之前,用一段短小(少于50个字)话来总结修改的内容,接下来在一行空行后面,输入更多深入的描述。工具将把提交的内容上送到邮件中,例如:使用第一行作为主题,其他的行作为内容。

git跟踪内容而不是文件:

很多版本控制系统都提供了一个添加命令,来告诉系统开始追踪更新为新文件。git 的添加命令更加简单并且更加强大:git add 适用于新文件和更新的文件,在两种情况下它都会为所给的文件和索引的内容生成快照,准备下次测试。

查看项目历史

任何时候,你都能通过如下命令查看你修改的历史:

		$git log
如果你想看每次操作完整的不同,使用如下命令:
		$git log -p
通常查看修改的概述有助于了解每一步:
		$git log --stat --summary
管理分支

一个单一的git仓库能容纳多个开发的分支。使用一下命令去创建一个“experimental”分支:

		$git branch experimental
如果你现在运行:
		$git branch
你将得到一系列已经存在的分支:
		  experimental
		* master
“experimental”分支是你刚刚创建的,“master”分支是为你自动创建的默认分支。星号(asterisk)标记了你当前所在的分支;输入:
		$git checkout experimental
来切换到experimental分支。现在编辑一个文件,提交修改,然后切换回master分支:
		(edit file)
		$git commit -a
		git checkout master
可以看到你刚才所做的修改不可见,这是因为它是在experimental分支上被创建的,而现在你已经回到master分支了。

你能在master分支上做一些修改:

		(edit file)
		$git commit -a
这时两个分支产生了分歧,每个分支都做了不同的修改。将experimental分支的修改合并到master分支上,运行:
		$git merge experimental
如果修改没有冲突,那么你已经完成了。如果有冲突,显示有冲突有问题的的文件上将会留下标记;
		$git diff
会显示这些信息。一旦你编辑了文件解决了这些冲突,
		$git commit -a
将提交合并的结果,最后
		$gitk
将结果历史用一个很好的图形化展示出来(笔者的电脑上使用gitk,显示无此命令)

这时你能够删除experimental分支:

		$git branch -d experimental
使用这个命令之前要确认experimental分支中的修改已经在当前分支中了。

如果你后悔在一个crazy-idea分支上进行开发,你能使用一下命令删除这个分支:

		$git branch -D crazy-idea
分支很轻量也很简单,所以只是一个很好的方式去尝试一些东西

为合作使用git

假设Alice已经使用git仓库开始了一个新的项目,目录是 /home/alice/project,同时Bob在同一台机器上也有一个home目录,他也想为这个项目做贡献,Bob可以如下操作:

		$git clone /home/alice/project myrepo
这样就创建了一个目录“myrepo”,在这么目录中包含了Alice仓库的副本。这个副本是和原始项目处于同等地位,拥有原始项目历史的副本。

Bob然后做了一些修改,并且提交:

		(edit files)
		$git commit -a
		(repeat as necessary)
当他准备就虚,他告诉Alice去 /home/bob/myrepo 这个仓库中下载(pull)修改的文件。她进行如下操作:
		$cd /home/alice/project
		$git pull /home/bob/myrepo master
这个操作将Bob的master分支合并到Alice的当前分支下。如果Alice同时做了自己的修改,她可能需要手动修复任何冲突。

“pull”命令因此体现了两个操作:它从远程分支中下载修改的部分,然后合并到当前分支中。

一般来说,Alice希望她所做的修改在初始化“pull”之前被提交。如果Bob的工作与Alice所做的相冲突,Alice将使用它的工作树(working tree)和索引区解决这些冲突,同时已经存在的本地的修改会妨碍解决冲突的进行(git会下载但是拒绝合并,Alice需要去除本地的修改,重新pull)。

Alice可以在合并之前先查看一下Bob所做的工作,这使用“fetch”命令。它允许Alice查看Bob所做的工作,为了决定他所做的是否值得被pull,使用特定的符号“FETCH_HEAD”,如下所示:

		$git fetch /home/bob/myrepo master
		$git log -p HEAD..FETCH_HEAD
即使Alice没有提交她本地的修改,这个操作也是安全的。“Head..FETCH_HEAD”意思是:显示所有能从FETCH_HEAD达到的,但是不包括能被HEAD的东西。Alice已经知道所有关于她当前状态的东西(HEAD),查看她所不知道的Bob状态(FETCH_HEAD)。

如果Alice希望通过可视化的手段查看Bob所做的,她可以使用以下命令:

		gitk HEAD..FETCH_HEAD
这里使用了两个相同的点号(dot),这个范围符号我们早些时候再git log中查看到。

Alice可能希望看到他们俩产生分歧后做的修改,她能使用三个点号(dot)替代两个点号(dot):

		$gitk HEAD...FETCH_HEAD
它的意思是:显示所有能被两个分别达到的文件,但是不包括被两个共同到达的文件。

请注意:这个范围符号能被用于gitk和git log中。

在检查完Bob所做的之后,如果这其中没有什么要紧的话,Alice决定不从Bob那里下载(pull),继续工作。如果Bob的历史中有一些东西Alice很急需的,Alice可能选择首先去保存她的工作进度,执行一次pull,然后最后从结果历史的顶部删除她的工作进度。

当你工作在一个小巧而紧密的群体里面,一遍一遍接触相同的仓库很常见。通过定义远程仓库速记,你能更轻易地完成它:

		$git remote add bob /home/bob/myrepo
拥有这些,Alice能使用git fetch命令来体现pull操作的第一部分,而不用合并他们的分支,使用以下指令:
		$git fetch bob
与普通书写的格式不同,它是当Alice使用一个远程仓库速记从Bob那里获取到的,它被存储到一个远程分支上,在这里是:bob/master。所以在这之后使用如下命令:
		$git log -p master..bob/master
显示所有Bob从Alice的master分支分出来之后所做的修改。

做完检查这些修改之后,Alice能够合并这些修改到她自己的master分支中:

		$git merge bob/master
这个合并的操作也能被这样完成:从她自己的远程记录分支中下载得到,像这样:
		$git pull . remotes/bob/master
注意,git 的pull经常合并到当前分支,不管在命令行中给出什么。

之后,Bob能用Alice最新的修改更新他的仓库:

		$git pull
注意,他不需要给出Alice仓库的路径;当Bob克隆了Alice的仓库,git在仓库配置中存储了她仓库的位置,那个位置就是用于pull:
		$git config --get remote.origin.url
		/home/alice/project
(被git clone 创建的完成配置可以使用 git config -l 来查看,同时git- config 管理页面解释了每个选项的意义)

git 同时在“origin/master”下保留了Alice master分支的原始备份:

		$git branch -r
		origin/master
如果之后Bob决定在不同的主机上工作,他仍然可以使用ssh协议执行clone和pull:
		$git clone alice.org:/home/alice/project myrepo
或者,git有原生的协议,或者使用rsync或http,查看git-pull查看详情

git也能被使用于CVS-like模式,拥有不同用户提交修改的集中仓库,查看git-push和gitcvs-migration。















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值