我很难理解/验证Pro Git中的以下行:
重要的是要注意,当您进行提取时远程跟踪分支,您不会自动拥有本地、可编辑它们的副本。换句话说,在这种情况下,你没有新的serverfix分支—您只有一个origin/serverfix指针无法修改。
我为存储库尝试了以下操作。
git clone git://git.bugseng.com/ppl/ppl.git
cd ppl
我从本地机器上删除了文件夹ppl/src/
,并将预先存在的文件夹ppl/m4/
复制到ppl/m4 - Copy
中,以便在本地修改/编辑此文件夹。
然后,我运行git fetch origin
只是为了(我想(让自己处于书中引用的上述情况。我(当然(对这个在线存储库没有任何写访问权限。
现在,我可以很容易地完成git add .
和git commit
而没有任何错误。git status
的输出为:
:~/ppl$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
一切如预期。也就是说,我已经能够在本地提交并编辑分支。我无法将这一点与书中的一句话相调和,该句话说我不会有这些书的本地可编辑副本。
serverfix
分支,而不是master
。
在master
(或任何远程HEAD(的情况下,当您进行克隆时,会自动为您提供一个本地副本;所以你没有必要做一个。
但是,如果有任何其他分支,clone
不会为您制作这些分支的本地副本,仅仅fetch
也不会为您提供它们的本地副本。您可能有远程跟踪分支,如origin/someBranch
,但如果要编辑someBranch
,则必须先创建它。
Pro Git引用说git fetch
实际上并没有签出您获取的远程分支的本地副本。它只是一个指针,允许git在本地知道分支的存在,并允许您检查它。要对此进行测试,请克隆远程存储库的副本。接下来,在远程fetch-branch-test
上创建一个分支。在本地repo上运行git checkout fetch-branch-test
,您会收到一个错误,说git找不到分支。在本地运行git fetch
,然后运行git branch
。您将看到仍然没有fetch-branch-test
的本地副本。最后,再次运行git checkout fetch-branch-test
,您会注意到现在有了远程分支的本地副本。这是因为git fetch添加了新远程分支的本地指针,但直到运行git checkout
后才添加其本地副本。