推送到远程存储库的当前分支是否会更新远程工作目录?

时间:2016-01-03 14:58:56

标签: git

假设下面的远程存储库有一个工作目录,因此它也有一个当前分支。

  1. 是否正确?
    • git push可以推送到远程存储库中的当前分支,并且
    • 当发生这种情况时,git push不会更新远程存储库的工作目录

    我从Git获得版本控制的想法,由Loeliger,2ed, 特别是粗体文字:

      

    回想一下, git push命令不会检出接收存储库中的文件。它只是从源传输对象   存储库到接收存储库,然后更新   接收端的相应引用。

         

    在裸存储库中,这种行为是可以预期的,因为没有可以更新的工作目录   签出文件。非常好。但是,在一个发展中   作为推送操作的接收者的存储库,稍后可以   对使用开发存储库的任何人造成混淆。

         

    推送操作可以更新存储库状态,包括HEAD   提交。即使远程端的开发人员已经完成了   什么都没有,分支引用和HEAD可能会改变,变得不同步   带有签出的文件和索引。

         

    正积极在存储库中工作的开发人员   异步推送发生不会看到推动。但后续   该开发人员的提交将发生在意外的HEAD上,创建一个   奇怪的历史。强制推送将失去对方的推送提交   开发商。该存储库中的开发人员也可能找到自己   无法将她的历史记录与上游存储库或   下游克隆因为它们不再像前面那样简单快速   他们应该是。她不会知道原因:存储库已经默默无闻   从她的下面变了出来。猫和狗将一起生活。   这会很糟糕。

  2. 如果我得到的想法是正确的,git push是唯一的git命令 在更改工作目录时不会更新工作目录 同一个存储库的当前分支?什么是其他类似的git命令? (对我来说,其他命令 更改当前分支将更新工作 同一存储库的目录。)

1 个答案:

答案 0 :(得分:5)

  
      
  • git push可以推送到远程存储库中的当前分支,并且

  •   
  • 当发生这种情况时,git push不会更新远程存储库的工作目录吗?

  •   

通常在git服务器上有bare repository。裸露意味着您没有git文件系统,而是文件夹包含.git文件夹的内容。

  

回想一下,git push命令不会检出接收存储库中的文件。它只是将对象从源存储库传输到接收存储库,然后更新接收端的相应引用。

这是正确的,因为你没有工作文件夹,你没有任何文件,所以在推送过程中没有内容结账。

正如@VonC先前的问题已经回答过你:

  

从Git 2.3+开始,您可以配置 接收端到"有一个工作目录,并在接收存储库中检出分支。&#34 ;

  

...对我来说,更改当前分支的所有其他命令都将更新同一存储库的工作目录。

同样,通常在远程服务器上,存储库是一个裸存储库,因此没有文件签出到工作目录。

摘要

由于git是一个分布式版本控制系统,没有人会直接编辑共享集中式存储库中的文件。相反,开发人员将克隆共享裸仓库,在其仓库的工作副本中进行本地更改,然后回退到共享裸仓库,以便将其更改提供给其他用户。