Клонирование репозитория git-from-svn и получение всех удаленных веток - PullRequest
3 голосов
/ 30 марта 2010

Я изо всех сил пытаюсь понять, как можно клонировать репозиторий git из Subversion, а затем клонировать этот репозиторий на другую машину (git-to-git) и при этом иметь доступ ко всем исходным веткам и тегам Subversion. Вот что я сделал, и где я сталкиваюсь с препятствиями.

Сначала на машине A я клонировал свой репозиторий Subversion в репозиторий git:

[machine A]$ git svn clone -s http://svn.repo.url/MyProject

Это дало мне хранилище git со всей историей и всеми ветками и тегами моего исходного хранилища Subversion:

[machine A]$ git branch -r
* master
  remotes/v1
  remotes/v1.1
  remotes/v1.2
  remotes/test_migration
  remotes/tags/20100104
  remotes/tags/20100308
  remotes/trunk

Теперь на компьютере B я хочу клонировать этот репозиторий git и по-прежнему иметь доступ ко всем исходным веткам и тегам Subversion. Сначала я клонировал репозиторий:

[machine B]$ git clone machine.a:git/MyProject

Это дало мне клон репозитория git ... но я не вижу ни одной удаленной ветви или тега:

[machine B]$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Неважно, в какой форме git checkout --track -b [branch] origin/[branch] Я пытаюсь, я не могу создать ветку, созданную на машине B, которая отслеживает одну из удаленных веток, первоначально из svn ... и git svn fetch, git svn pull, или что-нибудь еще, я могу попробовать извлечь удаленные ветви и теги из репозитория на машине A. что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 30 марта 2010

Я думаю, это потому, что git не клонирует удаленные ветви по умолчанию. Настройте свой клон с помощью этой команды

git config --add remote.origin.fetch '+refs/remotes/*:refs/remotes/*'

перед тем, как вы начнете делать git fetch для клонирования исходного репо. Подробнее см. В документах (найдите строку выше, чтобы найти объяснение).

Также ознакомьтесь с разделом «ПРОТЕСТЬ». Subversion не git, и есть некоторые важные отличия, которые вы должны понимать, иначе вы испортите либо ваш git, либо ваше SVN-репо.

4 голосов
/ 15 декабря 2010

Я хотел бы прокомментировать этот ответ , но мне пока не разрешено, поэтому я должен опубликовать новый.

Обратите внимание, что после клонирования пультов svn вы должны инициировать их локально, как описано в документации. Однако со ссылкой на документы:

обязательно используйте тот же URL-адрес и параметры -T/-b/-t, которые использовались на сервере.

git config -l | grep remote перечислит всю конфигурацию для всех удаленных устройств (URL, филиалы, игнорировать и т. Д.) В хранилище хоста. Вывод будет похож на:

svn-remote.svn/bbpress.url=http://svn.automattic.com/bbpress/trunk
svn-remote.svn/bbpress.fetch=:refs/remotes/svn/bbpress

Затем добавьте его, скажем, к .gitignore (комментируя # и заменив = пробелом) для дальнейшего использования. После клонирования используйте git config --add с этой информацией, и вы получите точную копию этих пультов.

...