2013-06-26 77 views
2

我使用git-svn連接到subversion服務器。似乎可以更改(舊提交)的Subversion提交消息。請參閱接受的答案herehere。但git svn rebase不會注意到這種變化。如何在svn commit的提交消息發生更改時修復git-svn歷史記錄?

我怎麼能告訴git svn「修復」其歷史上的這種變化?


起初我沒注意到我的歷史是由仍然包含舊提交消息,直到我增加了遠程斷。這個遠程是同一臺服務器的另一個git-svn結帳。當兩個簽出中的一個更新(使用git svn rebase)在svn中的提交消息發生更改並且其他更新發生更改之前更新之後,git-svn分支將在我的存儲庫和遠程存儲庫中指向不同的SHA-1哈希。這是git-svn分支指針之一是錯誤的,需要重新進行同步/修復:

  /C - D - E - F 
.... - A - B 
      \ C' - D' - E' - F' 
      ^
     commit-message 
     later changed 

回答

2

使用git svn reset -r <n>重置(其中<n>是Subversion修訂;見doc):

重置

撤消的影響取回到指定的修訂。這允許您重新獲取SVN修訂版。 [...]按照重置與fetch,然後git重置或git rebase將本地分支移動到新樹上。

$ git svn find-rev B 
3 
$ git svn reset -r3 
r3 = 6f29012a3e25e00c899976b584084d6968aba43d (refs/remotes/git-svn) 
$ git svn fetch 
... 
-1

如果你沒有在顛覆修訂頂部的任何本地提交,你可以做一個復位,然後重新運行SVN變基:

git reset --hard B 
git svn rebase 

如果你有本地提交,我想嘗試的互動變基,然後重新運行了svn變基:

git rebase -i B 
<A text editor will popup and you can remove the individual svn revisions there> 
git svn rebase 

如果變化是送儘管在svn的歷史中很久以前,我可能會嘗試在git中編輯一條消息使其完全相同,並查看git-svn是否會接受該消息。