如果对已经克隆另一个远程仓库的存储库进行 git clone
,是否会产生任何不良副作用?
没有副作用,但你需要了解在克隆存储库时会发生什么。
问题在于,当你“正常方式”克隆存储库--也就是在调用git clone
时没有任何调整参数--你并不会得到与源存储库相同的存储库。它确实包含完全相同的历史记录,但是却有不同的分支布局。
为了以非科学的方式解释这个问题,让我们来看一个例子:
源存储库包含“master”、“dev”和“release”三个分支。
它还包含两个标签,“v1”和“v2”。
该存储库中的“HEAD”引用指向“master”分支。
当你克隆这个存储库时,你的本地克隆将包含:
三个远程跟踪分支:“origin/master”,“origin/dev”和“origin/release”。
两个标签,“v1”和“v2”。
一个名为“master”的本地分支,它指向与远程跟踪分支“origin/master”相同的提交。
如果你现在克隆这个克隆结果将会有:
一个单一的远程跟踪分支“origin/master”。
一个单一的本地分支“master”。
两个标签,“v1”和“v2”。
这可能看起来很奇怪,但事实上,在手册页面中明确说明了这一点:
克隆后,仅使用 "git fetch" 命令将更新所有远程跟踪分支,并且 "git pull" 命令还将合并远程主分支到当前主分支中(如果有的话),除非使用了 "--single-branch" 选项(请参见下文)。将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(可使用
git branch -r
查看),并创建并检出一个初始分支,该分支是从克隆存储库当前活动分支分叉出来的。
如果一开始没有检出初始存储库的分支,那么您肯定会错过它们。
没有副作用。您可以安全地克隆通过git clone
操作得到的存储库。顺便说一下,这就是git与像Subversion这样的集中式系统不同之处:克隆的存储库是原始存储库的完全副本(除了需要手动检出的分支)。