遥控器和遥控器的位置有区别吗?

时间:2014-03-07 16:53:58

标签: git git-remote

也许我错过了一些关于遥控器的东西,但这让我很困惑: 我有一个带遥控器的git repo,遥控器实际上是我的USB记忆棒。 在我的遥控器上,有一个提交多于我当地的回购,所以

 local-dir> git rev-list master -3

给了我

941eba8b82233f5daceb41a57e10ff2d6d893fb9 
8b386974a1976142912c41cc7e270e69ad5ecbd5
dd09efc70c029ea79fcfc455068df3788d4e193a

远程-DIR> git rev-list master -4

给了我

28aaf69aafa9f21ad52c874d2e753bfd8e1b1f65                                   
941eba8b82233f5daceb41a57e10ff2d6d893fb9
8b386974a1976142912c41cc7e270e69ad5ecbd5
dd09efc70c029ea79fcfc455068df3788d4e193a

到目前为止一切顺利。

我的遥控器名为stick。当我做的时候

 local-dir> git rev-list stick/master -4

我得到了

a0e2cf2a389647768384259e3e8f5a7b310740d4
243a8b06b3df1f232dafb9385eab8336dea23f25
c316830bb4c5a27d29e01bbd734ab46f3d90a24e
bfd1dc912ab3c9f9d9bc5b10303b580305f68ac4  

进一步的调查显示“这种方式”我落后了10件事。 git fetch stick master不会改变这种情况。

我原本预计remote-dir> git rev-list master -4local-dir> git rev-list stick/master -4会产生相同的效果,至少在获取之后。好像我错过了什么。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

命令:

git fetch stick master

在较旧的gits中的行为与最新的gits不同。

告诉git:

  1. 将名称stick设置为遥控器(找到USB记忆棒的路径)。
  2. 咨询远程 - 通常这将通过网络,但在这种情况下,只需查看其他存储库 - 看看它有哪些分支。
  3. 如果遥控器有一个名为master的分支(它确实如此),则收集所有提交和其他所需对象。
  4. 最后(这是最新的gits不同之处),在本地存储库中以名称FETCH_HEAD编写; 更新refs/remotes/stick/master中的“远程分支”信息。
  5. 这是导致混淆的最后一步。

    如果你改为运行:

    git fetch stick
    

    这将遵循前两个步骤,但对于步骤3和4,它将带来所有分支, 更新所有远程分支信息。然后git rev-list stick/master -4将按照您预期的方式运行。

    如果升级到git 1.8.4或更高版本,git fetch将在步骤4中更新远程分支信息,即使使用双参数git fetch表单,它也将按照您的方式运行预期

    以下是1.8.4的发行说明对此的说法:

      
        
    • “git fetch origin master”与“git fetch origin”或“git fetch”不同   没有更新“refs / remotes / origin / master”;这是一个早期的   设计决定保持远程跟踪分支的更新   可预测,但实际上,人们发现它更多   每当我们有一个时,便于机会性地更新它们   机会,当我们运行“git push”时,我们一直在更新它们   无论如何,已经打破了原来的“可预测性”。
    •