我在家裏使用Arch Linux倉庫中的git版本1.8.5.3,以及在Ubuntu 13.10中使用git版本1.8.1.2。在工作中,我們使用svn,所以我使用git svn處理它。合併兩個git-svn倉庫與常規git提交頂部
我在工作和家中使用git svn檢出了svn存儲庫。包含git-svn-id的提交消息是相同的。作者和日期也一樣。但是,由此產生的提交散列不一樣。
git svn fetch && git svn rebase
工作正常。然而,如果我試圖通過git在兩個倉庫之間合併一些倉庫的提交,git自然不能檢測到父母並且吐出合併錯誤。
我在想,這隻能是由於哈希計算的變化。這也會打破其他git倉庫,所以可能這是一個連接到git svn的問題。
第一編輯
git log --pretty=raw
表現出不同的父母,所有的提交。這解釋了不同的哈希值,但這是如何發生的呢?原來,如果我回到第一次提交,他們確實有相同的父母,因此是正確的哈希值。所以沿途某處,某事一定改變...
第二編輯
發現使用
git merge-base branch1 branch2
的提交以下是SVN合併分支中的最後共同提交哈希值。這是預期的行爲?
第三編輯
什麼工作是使用
git cherry-pick hash
和應用提交一個接一個......
更新
我的全部故障。我在工作時檢查了整個svn回購,但只有家中的箱子。這就是爲什麼從兩個svn分支合併開始,提交哈希是不同的。
嘗試使用'git log --pretty = raw ...'轉儲所有提交信息並仔細比較結果。通常,如果兩個提交的_all_屬性重合,則提交SHA1也會重合。 – user3159253
哦整齊,不知道。事實上,父母對於所有提交都是不同的...... – mxm
>這是預期的行爲嗎? - 可能。 SVN和GIT合併在本質上是不同的。 Git將一組提交標記爲父提交,並且該提交沒有優先級。與此同時,SVN有「假合併」 - 合併提交在分支樹中佔有一席之地,合併提交被記錄在提交元信息中。 – user3159253