Как правильно сохранить все ветки, используя svn-git (стандартное расположение), а затем svn-clone с опцией --bare - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь переместить svn-репозиторий в git-репозиторий. Я больше не хочу использовать SVN, поэтому я использую опцию no-metadata. Мне любопытно, почему после выполнения git svn fetch в моих ветках создаются только удаленные ссылки. Я создаю репо, используя:

git svn init -s --username=$SVNUSER --no-metadata http://URLTOSVN/$REPO
git config svn.authorsfile ../$USERFILE
git svn fetch

после запуска выборки, если я смотрю на ветви, которые у меня есть:

prompt$ git branch -a
* master
remotes/BRANCH_1
remotes/BRANCH_2
remotes/trunk

Мне нужны ветви BRANCH_1 и BRANCH_2, но, похоже, они не создаются. Теперь, когда я клонирую это с помощью параметра --bare, чтобы я мог разместить его в своем центральном репо, он игнорирует эти удаленные ссылки, и мое результирующее git-репо не знает этих ветвей, насколько я могу судить. Мне нужны эти ветки в моем репо. Что мне не хватает?

1 Ответ

0 голосов
/ 10 февраля 2012

Это означает, что удаленные филиалы доступны, но у вас нет их в качестве локальных филиалов.Вы должны быть в состоянии получить их с помощью git fetch:

git fetch origin [remote-branch]:[new-local-branch]

т.е.

git fetch origin BRANCH_1:BRANCH_1

Вот скрипт bash, который я использовал ранее для передачи репозиториев SVN в git.Это даст вам чистое git-репо на компьютере, на котором он запущен в текущем каталоге:

#!/bin/bash

REPO=$1
REPO_tmp=$REPO"_tmp"
USERFILE="/tmp/users.txt"

echo $REPO " > " $REPO_tmp

mkdir $REPO_tmp
cd $REPO_tmp
echo `pwd`

svn log http://URLTOSVN/$REPO|grep \| | awk 'BEGIN { FS = "|" }; {print $2}' | awk '{print $1 " = " $1 " <" $1 "@domain.com>"}' | sort | uniq > $USERFILE

git svn init http://URLTOSVN/$REPO --no-metadata

git config svn.authorsfile $USERFILE
git svn fetch

cd ..

git clone --bare $REPO_tmp $REPO.git

Это также сохранит вашу историю журналов svn.Вам, вероятно, придется поиграться с параметрами соединения, так как я использовал svn + ssh, а не http.Глядя на репо, которое я импортировал, а затем клонировал, у которого были филиалы, я вижу примеры, подобные этому:

git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/signup

В вашем голом репо ветви должны просто иметь свое имя.то есть:

git branch -a
* master
  BRANCH1
  BRANCH2

Однако я обнаружил, что смог создать ветку с именем remotes / branch1, поэтому может случиться так, что у вас действительно есть локальные ветки с просто странным именем.Вы можете попробовать swicthing с:

git checkout remotes/BRANCH_2
...