Git“获取网址”和“推送网址”,有什么区别?

时间:2010-12-17 06:19:41

标签: git workflow push fetch

某个遥控器的Fetch URL和Push URL何时不相同?

例如,当我为远程命名中心运行git remote show central时,输出如下:

* remote central
  Fetch URL: aoberoi@example.com:/home/aoberoi/Repositories/example.git
  Push  URL: aoberoi@example.com:/home/aoberoi/Repositories/example.git
  HEAD branch: master
  Remote branch:
    master tracked

我只是不明白为什么我会从两个不同的URL中获取和推送,这是什么类型的工作流程?

2 个答案:

答案 0 :(得分:11)

我不确定您的意思,因为您的示例包含2个相同的网址,但推送和拉取的网址可能因以下原因而有所不同:

  • 协议问题:请参阅Git protocols:网址将稍微不同,因为并非所有协议都支持推送操作(例如,http,除非是{ {3}})
  • 中间回购:您可以推送到另一个存储库,该存储库将成为真正的“中央”存储库和您的存储库之间的“中间人”。然后可以执行某些操作(例如通过后接收挂钩),然后如果那些操作(如“单元测试”,“静态代码分析”......)则将提交推送到那里的“实际”远程。成功通过。
    例如,这种用法,请参见:
    smart http”。

据说,Git maintainer What is the cleverest use of source repository that you have ever seen? commit 697f652(Git 2.3.1 +,2015年第1季度/第2季)确实提到:

  

尝试使用单个遥控器(例如“原点”)从一个地方(即upstream)获取,同时推送到另一个地方(即您的发布点)似乎是一个常见的错误。

     

这将永远不会令人满意,并且很容易理解为什么如果你考虑refs/remotes/origin/*在这样一个世界中意味着什么。它从根本上说不能反映现实   如果它遵循您的上游状态,则它与您拥有的不匹配   发表,反之亦然。

     

文档不清楚,“remote.<nick>.pushURL”和“remote.<nick>.URL”用于命名通过不同传输访问的相同存储库,不是两个单独的存储库。 / p>

答案 1 :(得分:0)

我认为你可以使用它,如果你想要一个“升级”回购贡献者会推动,然后其他人会在审查和批准后将更改从那里推送到主回购。所以你要从主回购中获取,然后推送到分段回购。