2010-09-19 4 views
1

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

это то, что я сейчас на ноутбуке:

--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 add Laptop, но затем git fetch хочет получить все это от ноутбука. Я подумал, что, может быть, с помощью git clone - depth x Laptop, а затем их трансплантация может работать, но все же требуется, чтобы все исходные файлы переносились на ноутбук -> uniOne, а не только на изменения. Я мог бы попытаться экспортировать все патчи с ноутбука и применить их поверх новой проверки svn, а затем заставить ее отслеживать ветку на моем ноутбуке (если это возможно), но было бы легче подождать, пока я буду на uni, а затем просто клонировать нормально.

+0

Ваше описание uniOne/uniTwo немного запутанно. Не могли бы вы обновить и уточнить? Это мое понимание до сих пор: В вашем университете есть хранилище Subversion, с которым вам нужно взаимодействовать. Вы хотите клонировать проект внутри этого репозитория SVN в репозиторий Git, который вы можете принести домой на свой ноутбук? –

+0

Есть два unis: один с svn repo (uniTwo), другой, где у меня есть доступ к большому компьютеру (uniOne). Я разрабатываю моделирование на своем ноутбуке и запускаю их на uniOne. Суть в том, что скорость загрузки с моего ноутбука дома очень медленная, и все три компьютера находятся далеко друг от друга. На uniOne я хотел бы быть в состоянии вытащить с ноутбука, но, где возможно, получить от svn repo в uniTwo. – myles

ответ

0

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

  • ГИТ-SVN < - это хранилище Subversion в университете
  • уни/мастер < - это хранилище Git в вашем университете. Это jus «выборка репозитория», которая получает последнюю историю из репо Subversion.
  • ноутбук/мастер < - Это репозиторий Git на вашем ноутбуке. Здесь вы работаете.

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

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

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

Если вы хотите, чтобы подтолкнуть изменения от вашего ноутбука обратно ГИТ-SVN, вы должны настроить ГИТ-SVN удаленного на вашем ноутбук/мастер первый:

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.