2012-02-24 144 views
30

當我運行git svn fetch有時打印以下警告:混帳SVN挑櫻桃忽略警告

W:svn cherry-pick ignored (/path/in/svn:<svn revision number list>) missing 55 commit(s) (eg 9129b28e5397c41f0a527818edd344bf264359af) 

什麼這個警告是什麼?

+0

嗨,我認爲櫻桃採摘破壞了歷史!也許這就是爲什麼他說失蹤「歷史」55commits – 2012-02-24 11:48:43

+0

@ SG86,你是什麼意思說'摧毀'? – 2012-02-24 13:03:11

+0

櫻桃採摘不會破壞歷史。櫻桃採摘複製它。 Git通常不會真正摧毀歷史。 Rebase將孤兒它,但它仍然在存儲庫中存在一段時間,直到它被垃圾收集。在此之前,它可以通過git-reflog進行恢復。 – bambams 2013-02-11 15:24:47

回答

43

當有人使用Subversion進行「櫻桃挑選合併」時,Subversion會記錄涉及的文件和文件夾在元數據中合併的提交。

當你做一個git svn fetch,Git發現合併元數據,並試圖將其解釋爲Git遠程分支之間的合併。所有這些信息意味着Git試圖做到這一點,但失敗了,所以它會將它記錄爲常規提交而不是合併。

這不是你需要擔心的事情,除非你看到Git如何提取Subversion提交的錯誤。

的詳細信息:

說你有兩個分支AB一個Subversion版本庫,與匹配的Git SVN倉庫:

A B 

* r6 
| * r5 
* | r4 
| * r3 
|/  
* r2 
* r1 

如果你重返分支B回分支A ,你可以在分支A的工作副本中使用命令,如svn merge -r 3:HEAD ^/branches/Bsvn merge --reintegrate ^/branches/B。 Subversion會在svn:mergeinfo標籤中記錄元數據,記錄此合併發生,並且您的下一個git svn fetch將看到此元數據,請參閱分支B已重新集成到分支A,並將其歷史記錄中的相應提交記錄爲合併。

如果你只是想一個從分支B分支A的commit(比如R3添加你需要的功能),但你不想重返整支呢,你會改爲使用Subversion命令狀svn merge -c 3 ^/branches/B 。同樣,Subversion會記錄合併元數據,Git會看到這一點並嘗試解決它是否可以像前面的示例中那樣記錄分支合併。在這種情況下,它不能:分支A不包含分支B's r5的任何內容。這就是觸發這個警告的原因。

+0

你能解釋一下你的意思嗎?但是,說你剛剛從分支中拉出r3? – 2012-02-25 00:30:11

+1

我剛剛重寫了一些例子。這更清楚嗎? – 2012-02-25 10:39:54

+0

謝謝,現在很清楚 – 2012-02-26 13:38:39