Добавление svn-remote в существующий репозиторий git
У меня есть репозиторий git, и моя компания назначила мне пустую репозицию svn для хранения моего кода. Так что я хотел бы просто добавить, что svn repo как удаленный от моего существующего репозитория git и затем нажмите на него.
Теперь все учебники git -svn начинаются с "сначала клонировать репозиторий svn, а затем добавлять код". Это не работает для меня, поскольку у меня уже есть существующий репозиторий git.
Я также нашел несколько руководств по импорту ветвей svn в git repo, но это также не то, что мне нужно, мне нужно импортировать репозиторий git в репозиторий svn.
Я попробовал просто сделать git svn init http://remote-repo
, а затем git svn rebase
, но это закончилось тем, что "Не удалось определить информацию SVN вверх по рабочему дереву".
Я думаю, этот парень имел ту же проблему, но у него не было ответов. Любые идеи о том, как это сделать?
изменить:
Я сделал несколько дополнительных упражнений, но безуспешно. Я перенес историю git в историю svn и сделал rebase, но это не устранило проблему. Странно. Вот что я сделал.
После git svn init
я сделал:
git svn fetch # so now I see the svn history in my git repo - I have two unconnected histories in my repo
git checkout svn-git #checking out svn remote
git checkout -b voracle_svn # putting content of the remote to a branch
Затем в gitk я создал ветвь с именем "graft_child", указывающую на мою первоначальную фиксацию git (начало моей истории git) и перенесенную на HEAD ветки svn:
git checkout graft_child # checking out the start of git repo
git reset --mixed voracle_svn #positioning myself to the HEAD of svn remote
git commit -am "Grafting git repo onto svn" #as the message said
Затем я добавил идентификаторы SHA1 для дочернего и родительского коммитов в .git/info/grafts и resetarted gitk. Gitk теперь показывает одну историю (хотя и с испорченными датами), трансплантат был успешным. Затем я пересобил ветвь svn:
git checkout voracle_svn # checking out the branch wich points to the HEAD of svn repo
git rebase master
Это успешно переадресовано voracle_svn для управления, что означает, что я должен был бы перенаправить свое репо на SVN. Или так я думал, потому что
git svn rebase
снова дал мне "Невозможно определить информацию SVN вверх по истории рабочих деревьев".
Теперь у меня действительно нет идей: - (
Ответы
Ответ 1
Короткий ответ
Вы должны инициировать это SVN-репо с некоторой фиксацией клиентом SVN, например так.
$ touch foobar
$ svn add foobar
$ svn ci -m "init svn repo for git svn can detect upstream"
Длинный ответ
если репозиторий svn пуст, когда вы используете git svn clone xxx
, клиент git не может обнаружить информацию восходящего svn из истории вашего рабочего дерева, поэтому вам следует запустить репозиторий svn, как описано выше.
Предположим, что ваш локальный /path/to/git_work_tree
git - /path/to/git_work_tree
, а URL-адрес /path/to/git_work_tree
svn - http://path/to/svn_remote_url
.
-
init svn repo от клиента svn. $ svn co http://path/to/svn_remote_url svn_work_tree $ cd/path/to/svn_work_tree $ touch foobar $ svn add foobar $ svn ci -m "init svn repo"
-
git svn клонирует ваш svn репо на локальный. $ git svn clone http://path/to/svn_remote_url git_svn_work_tree
-
объединить ваше локальное репозиторий git с git_svn_worktree $ cd/path/to/git_svn_work_tree $ git pull/path/to/git_work_tree
-
теперь вы наконец можете зафиксировать свой код $ cd/path/to/git_svn_worktree $ git svn rebase $ git svn dcommit
ПОВЕСЕЛИСЬ!