2013-08-01 2 views
2

Итак, я установил репозиторий git-svn и подтолкнул его к github. Но если кто-то клонирует его, в клоне нет конфигурации svn.
различий между репозиторием я толкнул и один я клонированного из GitHub только после того, как я нажал это:Как поделиться конфигурацией git svn?

enter image description here

Один я нажал (клон SVN с информацией SVN) находится на втором плане справа - клон из github находится слева
Какую из этих (папки/файлы (или разделы конфигурации)) следует поделиться, чтобы люди установили git-svn, как у меня? В том смысле, что они клонируют, а затем копируют вставку этих файлов (и, возможно, запускают git svn rebase), и у них такая же настройка, как у меня. Я также клонировал все ветви и метки svn repo как удаленные ветви, и я тоже хотел бы поделиться ими. В идеале эти файлы все равно должны быть действительными даже после того, как я (мы) начать толкания/dcommiting между мерзавца и СВН репо

ответ

1

Это, кажется, работает для меня:

git clone your-existing-git-repo new-cloned-repo 
cd new-cloned-repo 
git fetch origin refs/remotes/*:refs/remotes/* 
git init 
git svn init -s "svn://your-svn-server/your-svn-repo/your-svn-project" 
git svn fetch 
git checkout master 
git svn rebase 

Хотя вышеуказанные работы, я нашел ниже делает репо с файлом .git/config, который идентичен моему оригиналу (нет удаленной привязки origin к ветке master).

mkdir new-cloned-repo 
cd new-cloned-repo 
git init --bare .git 
git remote add backup your-existing-git-repo 
git fetch backup refs/remotes/*:refs/remotes/* 
git fetch backup refs/heads/*:refs/heads/* 
git fetch backup refs/tags/*:refs/tags/* 
git init 

# update SVN references 
git svn init -s "svn://your-svn-server/your-svn-repo/your-svn-project" 
git config svn.authorsfile your-authors-file.txt 
git svn fetch 

git checkout master 
git svn rebase 
git svn show-ignore >> .git/info/exclude 

Это должно клонировать все Git совершает git clone/git fetch и удаленных филиалов (все филиалы SVN/теги, существующий репо знает о) git fetch origin refs/remotes/*, обновлять информацию git svn init подключения SVN, а затем обновить версию SVN на Git фиксации отображения через git svn fetch.

git svn init -s предполагает, что вы храните вещи в обычном порядке SVN под your-svn-project (trunk, branches/*, tags/*).

Я не уверен, что нужен git init, но я уверен, что это ничего не вредит, если оно не нужно. Кроме того, git checkout master, вероятно, избыточен, но ничего не наносит вреда.

+0

Вышеприведенное может быть легко скопировано в файл '.bat' или' .sh'. Я сам создал сценарий оболочки, который проверяет, чтобы существовали хранилища git и svn, проверяя возвращаемые значения 'git ls-remote '$ EXISTING_GIT_REPO">/dev/null 2> & 1' и 'svn ls" $ EXISTING_SVN_REPO " 2>/dev/null | grep -q trunk' соответственно, а также проверяет, чтобы новый каталог репо не существовал, прежде чем что-либо делать. –

+0

Спасибо - 'your-existing-git-repo' - это тот, который я нажал на сервер или тот, который у меня есть локально (тот, в котором есть конфигурация svn)? Если это тот, который я нажал на сервер, у него нет информации о пульте. Re: '-s' - команда clone, которую я использовал, - это [здесь] (http://stackoverflow.com/questions/17910674/extra-branches-created-by-git-svn-clone). Думаю, я должен использовать это где вы используете 'git svn init -s' –

+0

Я создал репо из' git svn clone -s ...' и скопировал его с помощью зеркала 'git push my-backup-repo -mirror'. Я использую приведенное выше, чтобы создать копию первой из зеркальной резервной копии. В этом сценарии 'your-existing-repo' - мое резервное зеркало (которое ничего не знает о svn-сервере, но имеет все ветки и теги из-за' --mirror'). Мы предполагаем, что вы потеряли свой оригинальный svn-клон или пытаетесь создать новый, так или иначе, из вашего git-зеркала. –

Смежные вопросы