Клонируйте репозиторий git-svn, получив всю часть svn из исходного репозитория svn - PullRequest
1 голос
/ 20 сентября 2010

Как я могу клонировать git-репо со своего ноутбука (дома) на сервер (в университете), получая при этом большую часть репо из третьего (svn) репо в другом универмаге, который является основной базой кода. Я хотел бы свести к минимуму объем домашнего <-> универсального трафика за счет максимизации трафика uniOne <-> uniTwo.

вот что у меня сейчас на ноутбуке:

--o--o--o---o---o---o git-svn trunk  
         `--o--o-o--o git mybranch  

это то, что я хотел бы получить на uniOne:

--o--o--o---o---o---o git-svn trunk <-- from uniTwo  
         `--o--o-o--o git mybranch  <-- from Laptop

После клонирования репо должно иметь возможность вытягивать ветки с ноутбука.

Я пробовал: на uniOne: git-svn clone uniTwo, git remote добавить ноутбук, но затем git fetch хочет получить все это от ноутбука. Я подумал, что, возможно, с помощью git clone --depth x Laptop, а затем привить их вместе, может потребоваться передача всех исходных файлов Laptop-> uniOne, а не только изменений. Я мог бы попытаться экспортировать все патчи с ноутбука и применить их поверх свежей проверки svn, а затем заставить ее отслеживать ветку на моем ноутбуке (если это возможно), но было бы проще подождать, пока я не буду следующим в универе просто клонируй нормально.

1 Ответ

0 голосов
/ 28 сентября 2010

Давайте определим ваши репозитории:

  • git-svn <- это хранилище Subversion в университете </li>
  • uni / master <- это Git-репозиторий в вашем университете. Это просто «извлекаемый репозиторий», который получает последнюю историю из репозитория Subversion. </li>
  • ноутбук / мастер <- это Git-репозиторий на вашем ноутбуке. Здесь ты работаешь. </li>

Я бы предложил следующую настройку:

Создайте uni / master , выполнив git svn clone из git-svn . Автоматически или регулярно обновляйте uni / master с последними изменениями от git-svn , выполняя git svn rebase (запуск с фиксацией коммита, cron-job или вручную каждый раз, когда вы в универе).

Создание ноутбука / мастера путем клонирования uni / master . Здесь вы можете совершать локально так часто, как вы хотите. Когда вы учитесь в университете, получите последние изменения от uni / master , запустив git pull --rebase (вам всегда нужно делать --rebase, чтобы сохранять историю линейной, потому что SVN не понимает git-ветки).

Если вы хотите перенести изменения с вашего ноутбука обратно на git-svn , вы должны сначала сконфигурировать git-svn remote на вашем ноутбуке / мастере :

git svn init https://url.to.uni-svn-repo

Теперь вы можете отправить свои последние изменения обратно в uni-svn с помощью git svn dcommit Обратите внимание, что вам, возможно, придется сначала обновить ссылку на последний коммит в uni / master . первый:

git update-ref refs/remotes/git-svn refs/remotes/uni/master

НЕ пытайтесь протолкнуть ваш ноутбук / мастер на универ / мастер . Это принесет хаос, так как история перебазирования / переписывания просто запутает Git, когда он снова попытается синхронизировать с git-svn .

См. Также http://www.tfnico.com/presentations/git-and-subversion, где я начал собирать кучу советов по совместной работе с Git и SVN.

...