2013-09-02 2 views
2

Возможно ли в Git сделать следующее, легко?Git - несколько репозиториев?

  • имеет «главный» репо, расположенный на скажу, GitHub
  • Держите другой репозиторий в Bitbucket, а другой на сервере (веб-хостинг)

Когда местное развитие происходит, я хочу нажатие на то, чтобы вносить изменения в GitHub и одновременно изменять те же самые изменения в других репозиториях.

Я попытался сделать это с помощью --mirror, но с командой из 7, работающей над одним и тем же проектом, кажется, что она подвержена удалению ветвей функций при обновлении зеркала.

Мысли? Есть ли способ сделать это без ручного редактирования файла .gitconfig, чтобы вручную определить источник, который указывает на множественные URL-адреса репо? Это можно сделать с помощью крючка?

+0

Я бы рекомендовал использовать крюк сервера для _forward_ push на другой пульт. Я точно не знаю, как бы добиться этого, но это была бы моя стратегия. – mgarciaisaia

+0

Если вы этого еще не знали, 'git push -mirror' удаляет ссылки/ветви в удаленном репо, если они не существуют в локальном репо, поэтому вы видите, что ветви функций удаляются ... это почему это «зеркало», точное точное состояние *** локального репо копируется на дистанционное репо! –

ответ

4

Вы можете просто определить псевдоним, чтобы сделать это:

git config alias.pusheverywhere \ 
"!git push github && git push bitbucket && git push production" 

The && в команде является логическим И, поэтому команда на правой стороне от него будет выполняться только если команда на левой стороне преуспевает без ошибок.

+0

Это вполне практично. – Kevin

3

Зеркалирование полученного репо может быть сложным, особенно если вы не создали свой репозиторий ниже по потоку с git clone --mirror.
И в вашем случае вы не создадите локальный («нисходящий») репо таким образом, поскольку у вас есть три восходящих зеркальных репозитария, которые вы хотите сохранить.

В блоге статью «How to properly mirror a git repository» упомянуть, что для местного репо, чтобы отразить толчок, вам нужно:

git fetch --prune upstream_repo 

(чтобы быть уверенным, чтобы очистить remote tracking branches, которые отслеживают удаленные ветви upstream repo)

git push --prune upstream_repo +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/* 

(и что не включает в себя GIT заметки, кстати)

Нажатие на три операции РЕПО является одним из способов, но я предпочел бы:

  • толкая подталкивать репо
  • имеющий штангу получить крюк, который толкнул на GitHub и Bitbucket РЕПО

Если проблема обнаружена на прод репо (как недостающий комментарий на коммит, или какая-либо другая политика не соблюдается), вы получаете шанс:

  • отказывает нажим на проде
  • не загрязнять GitHub и Bi tBucket repos
Смежные вопросы