2010-05-08 74 views
12

如何使用git-svn和github跟蹤上游SVN更改?使用git-svn和github跟蹤上游svn更改?

我以前的git-svn的轉換一個SVN回購與git 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 

然後我改變了我的git回購,犯了一些變化,並推到github上。

現在,我在一臺新機器上。我想採取上游SVN更改,將它們與我的github回購合併,並將它們推送到我的github回購。 This documentation說:「如果你失去了你的本地副本,只需再次使用相同的設置再次運行導入,你將得到所有必要的SVN元信息的另一個工作目錄。」

所以我做了以下。但是沒有一個命令按照需要工作。如何使用git-svn和github跟蹤上游SVN更改?我究竟做錯了什麼?

$ 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

它看起來像,除了你的rebase,一切都如預期發生,但有更多的你可能期望的言辭。以下是我想要在新機器上創建/集成位的方法:

  1. 克隆您的Svn存儲庫。理想情況下,我想從git回購開始,因爲它是屬於你自己的,並且處於已知狀態,但我不知道有什麼辦法可以從Svn獲取最初的內容,而不是將其克隆到其中。我喜歡在克隆時添加一個--prefix=svn/,這樣我們所有的來自Svn的遠程分支都會被註釋。
  2. 添加您的出處(就像您所做的一樣)。
  3. 創建一個本地分支進行工作。 git co -b local-branch svn/branchname。現在你有一個很好的當地玩東西的地方。
  4. 確保你在你剛創建的本地分支(你應該是)。
  5. 從Github拉。你已經做得正確,但含糊不清。要澄清含糊不清,請明確指出:git pull origin master(從原點分支到主分支)。
  6. 從Svn重新開始同步一切。 git svn rebase

我還沒有試過這個,但它是一個非常典型的工作流程,你得到的錯誤似乎與你的兩個遠程服務(Svn和Github)沒有關係。它們似乎更具通用性,與您的工作流程以及您如何調用命令有關。