我知道Team Foundation版本控制中的無根合併是危險的。我想知道Git是否也是危險的。Git允許無基本的合併嗎?
如果您不熟悉baseless合併,here's an example。紅色虛線是沒有根據的rebase/merge。
使用Git安全嗎?
我知道Team Foundation版本控制中的無根合併是危險的。我想知道Git是否也是危險的。Git允許無基本的合併嗎?
如果您不熟悉baseless合併,here's an example。紅色虛線是沒有根據的rebase/merge。
使用Git安全嗎?
嗯,是的,沒有。團隊基礎版本控制(TFVC)強制執行分支層次結構,並且它有一條規則,您只能從分支合併到其父代或子代。在您提供的圖像中,您可以將B合併到C,即而不是無基本的合併。將B合併到C將使用B3作爲共同的祖先,併產生一個很好的,易於處理三路合併。
然而,TFVC 不讓你合併一個直接進入C.預計您將合併到B,然後合併結果爲C.如果你想繞過這個工作流程,你堅持這樣做一個無基礎的合併,它跳過了共同的祖先計算。結果是,你在做一個沒有共同祖先的三路合併 - 這兩個文件看起來像是新增加的,它們之間的任何差異都將被視爲衝突。
這是一個巨大的痛苦。
Git不會嘗試強制執行任何分支層次結構,因此在您的示例中,您可以從C合併到A而不會受到任何處罰。 A3是在這種情況下,共同的祖先,你將有以下圖表:
C 1--2--3----M
/ /
B 1--2--3--4--5 /
/ /
A 1--2--3--4--5-----------
所以這種情況是不 Git中毫無根據的合併,但是你可以仍然在Git的毫無根據的合併。如果您嘗試合併兩個具有否共同祖先(沒有合併基礎)的分支,那麼這將是無根據的合併,並且在TFVC中進行無基本合併時會出現所有問題。
您可以嘗試創建一個沒有父母的新分支(通過git checkout --orphan
)。
您可以使用git cherry-pick
將任意提交應用於任何分支。
你在紅色顯示什麼是完全正常的合併使用Git,如果你在同一文件相同的地方改在2個分支的事情,你不會有除了一些「正常」合併衝突的困難。否則,沒有問題!
但是,如果您不需要實現合併,的確可以挑剔。
但是git的優點是你可以嘗試和撤消(合併很容易撤銷!)。所以沒有太多的困難,你可以嘗試合併,看看會發生什麼,回答你自己的問題;-)如果你不滿意撤銷!
歡迎離開tfs ;-)
但是,這不是一個合併,這是一個櫻桃選擇。 –