Git "Получить URL" и "Push URL", какая разница? - PullRequest
12 голосов
/ 17 декабря 2010

Когда 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

Я просто не понимаю, почему я выбираю и нажимаю на два разных URL-адреса, для какого типа рабочего процесса это предназначено?

Ответы [ 2 ]

12 голосов
/ 17 декабря 2010

Я не уверен, что вы имеете в виду, поскольку ваш пример включает 2 идентичный URL, но URL для push и pull могут отличаться из-за:

  • проблема протокола : см. протоколы Git : URL будет немного разным, потому что не каждый протокол поддерживает операции push (например, http, за исключением случая smart http )
  • промежуточные репо : вы можете перейти в другой репозиторий, который будет «посредником» между истинным «центральным» репо и вашим. Затем могут быть выполнены определенные операции (например, через хук после получения), а затем коммит будет перенесен на «реальный» пульт, если эти операции (такие как «модульное тестирование», «статический анализ кода» ...) ) успешно пройти.
    Пример такого использования см .:
    « Какое самое умное использование исходного хранилища вы когда-либо видели? ».

При этом commit 697f652 (Git 2.3.1+, Q1 / Q2 2015) от сопровождающего Git Junio ​​C Hamano (gitster) упомяните:

Кажется распространенной ошибкой пытаться использовать один пульт (например, «источник») для выборки из одного места (т. Е. upstream), одновременно нажимая на другое (т. Е. Точку публикации).

Это никогда не будет работать удовлетворительно , и легко понять, почему, если вы подумаете о том, что refs/remotes/origin/* будет означать в таком мире. Оно принципиально не может отражать реальность.
Если он соответствует состоянию вашего апстрима, он не может соответствовать тому, что у вас есть опубликовано и наоборот.

В документации неясно, что "remote.<nick>.pushURL" и "remote.<nick>.URL" предназначены для именования одного и того же хранилища, доступ к которому осуществляется через разные транспорты, , а не двух отдельных хранилищ .

0 голосов
/ 17 декабря 2010

Я думаю, что вы могли бы использовать его, если бы хотели, чтобы «промежуточные» участники репо давили на него, а затем другие передавали изменения оттуда к основному репо после рассмотрения и утверждения. Таким образом, вы берете из основного репо и нажимаете на промежуточный репо.

...