2010-05-11 76 views
2

我正在使用git-svn來處理代碼庫,我需要將trunk中的更改合併到我的科。在git中合併:通過git-svn,說已經是最新的,但git-diff說有差異

我有兩個分支在git中抓取,當我在分支中運行git diff trunk時,我可以看到所有更改。

但是,當我運行git merge heads/trunk時,我收到一條消息「已經是最新的」。

這顯然不是最新的。我究竟做錯了什麼?

+0

你有沒有檢查它的樣子在eg gitk? – Makis 2010-05-11 05:25:09

回答

1

「已經起牀了最新的」可能意味着:

  • 樹幹是一個parent of master(全部來自主幹的變化已經合併到主)
  • 或者你正在一個detached head工作(其中如果您直接簽出SHA1提交參考或標籤,則可能會發生)。

注意:注意git svn caveats

合併在Subversion的跟蹤缺乏,做與Subversion分支的發展是很麻煩的結果。
儘管git svn可以追蹤採用標準佈局的存儲庫的複製歷史記錄(包括分支和標籤),但它還不能代表SVT用戶在git上游發生的合併歷史記錄。
因此,建議用戶保持歷史儘可能線性內git的緩和與SVN

爲了簡單起見,用一個能力較少的系統(SVN)互操作的緣故相容性,則建議所有git svn用戶clonefetchdcommit直接從SVN服務器,並避免所有git clone/pull/merge/push操作之間的git存儲庫和分支機構。
在git分支和用戶之間交換代碼的推薦方法是git format-patchgit am,或者只是'dcommit'到SVN存儲庫。

+0

啊哈...所以我使用了太多的git功能,而不是從svn中拉出來真的讓我能夠。很高興知道,謝謝! – 2010-05-11 13:15:55

2

沒有一個例子。以下是如何陷入這種局面:

(在一個空的目錄開始):

 
> git init 
> echo "hello" > a.txt 
> git add -A 
> git commit -m "Created a on master" 
> git branch test 
> git checkout test 

此時A.TXT是在主機和測試分支相同現在

 
> echo "goodbye" > a.txt 
> git add -u 
> git commit -m "Changed a on test" 

(明顯)會有區別:

 
> git diff --name-status master 

M  a.txt 

還沒有git沒有合併:

 
> git merge master 
Already up-to-date. 

這是因爲更改是在測試而不是主控上進行的。如果切換到測試,差異同樣會報,但合併現在的變化,從測試到主合併:

 
> git checkout master 
> git diff --name-status test 

M  a.txt 
> git merge test 
Updating 088cd9d..3d8c8e2 
Fast-forward 
a.txt | 2 +- 
1 files changed, 1 insertions(+), 1 deletions(-) 

Git的合併是有方向性的,從分支合併到B是不一樣的B合併到A.

相關問題