2010-05-08 3 views
12

Как отслеживать изменения SVN по течению с помощью git-svn и github?Отслеживание изменений svn вверх по течению с помощью git-svn и github?

Я использовал ГИТ-SVN для преобразования репо SVN мерзавца на GitHub:

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 

Затем я сделал несколько изменений в моем мерзавца репо, совершенном, и толкнул на GitHub.

Теперь я нахожусь на новой машине. Я хочу принять изменения SVN вверх, объединить их с моим реестром github и направить их на мой репозиторий github. This documentation говорит: «Если вы когда-либо потеряете свою локальную копию, просто запустите импорт снова с теми же настройками, и вы получите еще один рабочий каталог со всем необходимым SVN metainfo».

Так что я сделал следующее. Но ни одна из команд не работает по желанию. Как отслеживать изменения SVN вверх по Git-svn и github? Что я делаю не так?

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 
To [email protected]:turian/osqa.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:turian/osqa.git' 
$ git pull 
remote: Counting objects: 21, done. 
remote: Compressing objects: 100% (17/17), done. 
remote: Total 17 (delta 7), reused 9 (delta 0) 
Unpacking objects: 100% (17/17), done. 
From [email protected]:turian/osqa 
* [new branch]  master  -> origin/master 
From [email protected]:turian/osqa 
* [new tag]   master  -> master 
You asked me to pull without telling me which branch you 
want to merge with, and 'branch.master.merge' in 
your configuration file does not tell me either. Please 
name which branch you want to merge on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details on the refspec. 
... 
$ /usr//lib/git-core/git-svn rebase 
warning: refname 'master' is ambiguous. 
First, rewinding head to replay your work on top of it... 
Applying: Added forum/management/commands/dumpsettings.py 
error: Ref refs/heads/master is at 6acd747f95aef6d9bce37f86798a32c14e04b82e but expected a7109d94d813b20c230a029ecd67801e6067a452 
fatal: Cannot lock the ref 'refs/heads/master'. 
Could not move back to refs/heads/master 
rebase refs/remotes/trunk: command returned error: 1 

ответ

5

Похоже, что, за исключением вашей перестановки, все происходило так, как ожидалось, но с гораздо большим количеством слов, которые вы могли бы ожидать. Вот что я думаю, что я бы сделал, чтобы создать/интегрировать бит на новый компьютер:

  1. Клонировать хранилище Svn. В идеале я хотел бы начать с git repo, потому что он принадлежит вам, и он находится в известном состоянии, но я не знаю, как изначально вытащить контент из Svn, чем клонировать его. Мне нравится добавлять --prefix=svn/ при клонировании, так что все мои удаленные ветви из Svn аннотируются как таковые.
  2. Добавьте ваш источник (как и вы сделали).
  3. Создайте локальную ветку для работы. git co -b local-branch svn/branchname. Теперь у вас есть хорошая локальная площадка для игры с вещами.
  4. Убедитесь, что вы находитесь в той локальной ветке, которую вы только что создали (вы должны быть).
  5. Тянуть от Github. Вы сделали это правильно, но неоднозначно. Чтобы устранить двусмысленность, будьте явными: git pull origin master (тянуть от начала до главной ветви).
  6. Rebase от Svn, чтобы синхронизировать все. git svn rebase.

Я не пробовал это, но это довольно типичный рабочий процесс, и ошибки, которые вы получаете, по-видимому, не связаны с вашим сервисом двух пультов (Svn и Github). Они кажутся более универсальными и связаны с вашим рабочим процессом и как вы вызываете команды.

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