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

Ank*_*kur 12 git workflow push git-fetch

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

例如,当我运行git remote show central远程命名为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
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 12

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

  • 协议问题:请参阅Git协议:url会略有不同,因为并非所有协议都支持推送操作(例如http,除非是智能http)
  • 中间回购:你可以推送到另一个存储库,这个存储库将是真正的"中央"存储库和你的存储库之间的"中间人".然后可以执行某些操作(例如通过后接收挂钩),然后如果那些操作(如"单元测试","静态代码分析"......)将提交推送到那里的"实际"远程操作. )顺利通过.
    例如,这种用法,请参阅:
    " 您见过的源库最聪明的用途是什么? ".

话虽如此,由Git维护者Junio C Hamano()提交697f652(Git 2.3.1 +,2015年第1季度/第2季度)确实提到:gitster

尝试使用单个遥控器(例如"起源")从一个地方(即upstream)推送到另一个地方(即您的发布点)时似乎是一个常见的错误.

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

文档不清楚" remote.<nick>.pushURL"和" remote.<nick>.URL"是指通过不同的传输而不是两个单独的存储库访问的相同存储.