当前位置: 首页 > 文档资料 > Git Magic 中文版 >

第 6 章 多人 Git

优质
小牛编辑
127浏览
2023-12-01

我最初在一个私人项目上使用Git,我是那个项目的唯一的开发者。在与Git分布式特性 有关的命令中,我只用到了pull 和*clone*,以此即可在不同地方保持项目同步。

后来我想用Git发布我的代码,并且包括其他贡献者的变更。我不得不学习如何管理有来自世界各地的多个开发的项目,幸运的是,这是Git的长处,也可以说是其存在的理由。

我是谁?

每个提交都有一个作者姓名和电子信箱,这显示在 git log 里。Git使用系统默认 设定来填充这些信息。要设定这些信息,键入:

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

去掉global选项设定则只对当前仓库生效。

远端分支

当你克隆了一个仓库,你也克隆了它的所有分支。你或许没有注意到这点,因为Git将它们 隐藏起来了:你必须明确地要求。这使得远端仓库里的分支不至于干扰你的分支,也使 Git对初学者稍稍容易些。

列出远端分支,使用:

$ git branch -r

你应该看到类似:

origin/HEAD
origin/master
origin/experimental

这显示了远端仓库的分支和HEAD,可以用在常用的Git命令里。例如,假设你已经做了 很多提交,并希望和最后取到的版本比较一下。你可以搜索适当的SHA1哈希值,但使用 下面命令更容易些:

$ git diff origin/HEAD

或你可以看看‘`experimental’'分支都有啥:

$ git log origin/experimental

多远端

假设另两个开发在同一个项目上工作,我们希望保持两个标签。我们可以同时跟踪多个 仓库:

$ git remote add other git://example.com/some_repo.git
$ git pull other some_branch

现在我们已经合并到第二个仓库的一个分支,并且我们已容易访问所有仓库的所有 分支。

$ git diff origin/experimental^ other/some_branch~5

但如果为了不影响自己的工作,我们只想比较他们的变更怎么办呢?换句话说,我们想 检查一下他们的分支,又不使他们的变更入侵我们的工作目录。这里我们并不要运行pull 命令,而是运行:

$ git fetch        # Fetch from origin, the default.
$ git fetch other  # Fetch from the second programmer.

这只是获取历史。尽管工作目录维持不变,我们可以参考任何仓库的任何分支,使用 一个Git命令,因为我们现在有一个本地拷贝。

回想一下,在幕后,一个pull是简单地一个 fetch 然后 merge 。通常,我们 pull 因为我们想在获取后合并最近提交;这个情况是一个值得注意的例外。

关于如何去除远端仓库,如何忽略特定分支等更多,参见 git help remote

我的喜好

对我手头的项目,我喜欢贡献者去准备仓库,这样我可以从其中拉。一些Git伺服让你 点一个按钮,拥有自己的分叉项目。

在我获取一个树之后,我运行Git命令去浏览并检查这些变更,理想情况下这些变更组织 良好,描述良好。我合并这些变更,也或许做些编辑。直到满意,我才把变更推入主资 源库。

尽管我不经常收到贡献,我相信这个方法扩展性良好。参见 这篇 来自Linus Torvalds的博客

呆在Git的世界里比补丁文件稍更方便,因为不用我将补丁转换到Git提交。更进一步, Git处理诸如作者姓名和信箱地址的细节,还有时间和日期,以及要求作者描述他们的提 交。