2011-05-18 33 views

回答

12

--dry-run選項git svn dcommit是找出將是什麼是非常有用的致力於Subversion。尤其是具有性質:

  • 它實際上並沒有犯什麼顛覆
  • 它會告訴你哪些差異列表將被計算在顛覆創造新修訂
  • 它會告訴你在Subversion中哪個分支你會承諾 - 這有時並不明顯,因爲它取自第一個祖先提交中指定的Subversion分支,在其提交消息中使用git-svn-id

一般來說,這是一個好主意之前要做git svn rebase甚至考慮使用dcommit,以便您的歷史線性化 - 否則合併提交在Subversion歷史中可能沒有多大意義。 (如果你已經這樣做了,那麼git loggitk --all也基本相同,但我認爲git svn dcommit --dry-run即使更難解釋也會給你更準確的圖像。)

1

我認爲最簡單的方法就是使用gitk來做到這一點。你會希望--all選項查看所有分支。如果您之前沒有使用過,只需鍵入:

gitk --all 

您將看到分支的圖形視圖。當你從SVN更新時,你基本上會做一個rebase(git svn rebase)。這意味着沒有簽入SVN的任何本地提交將在最後一次SVN提交後出現在分支上。基本上看你的遠程SVN中繼和你的主分支之間的提交。

1

我用git log --oneline --graph

* aaaaaaa commit message 
* bbbbbbb commit message 
|\ 
| * ccccccc commit message 
| * ddddddd commit message 
| * eeeeeee commit message 
|/ 
* fffffff commit message 
|\ 
...

可以很容易地看到,承諾aaaaaaabbbbbbbfffffff是對當前(主)分支。這些提交要麼已經或將承諾Subversion下次執行git svn dcommit時。 (提交cccccccdddddddeeeeeee是在一個單獨的分支,它被合併到主並不會致力於顛覆作爲單獨提交

+0

值得是明確表示,在'ccccccc'引入的變化,'ddddddd'和'eeeeeee'將顛覆結束,因爲爲合併提交的ffff計算的差異假設「ffffffff」的第一個父項爲「bbbbbbbb」,則ffff'將包含返回到「bbbbbbbb」的更改,正如您建議通過說分支「合併爲主」一樣。但是,這些更改不會作爲單獨的修訂版出現,因此結果可能並不理想 - 如果您想將這些歷史記錄提交到Subversion,首先執行「git svn rebase」是最安全的。 – 2011-05-18 05:11:41

+0

@Mark Longair:我的意圖是減輕任何擔心'ccccccc','ddddddd'和'eeeeeee'會出現在Subversion中作爲單獨的提交。根據我的經驗,這些提交通常構成一個功能分支,並不適合作爲單獨的Subversion提交。 – titaniumdecoy 2011-05-18 05:15:37

0

只看到提交的名單,這是我的魔:

git svn dcommit -n | sed 1d | cut -d" " -f3 | xargs -I{} git log --oneline --no-walk {} 

輸出:

c2e1eff changed a thing 
a889dbf changed a second thing 
18a4653 undid the second thing-- oops 
相關問題