2010-05-26 124 views
7

在兩個不同版本的目錄中找到具有相同名稱的兩個文件時,如果元素OID不同,但名稱相同,則在ClearCase中發生惡意孿生兄弟。GIT有沒有邪惡的雙胞胎問題?

在GIT中,SHA1標識始終是唯一的,並且具有相同名稱的文件始終具有不同的SHA1標識。

我們沒有邪惡雙胞胎的概念,但有可能有2個或更多開發者在同一目錄中創建具有相同文件名的不同內容的文件的機會。在合併期間,當兩個文件完全不同時,開發人員有機會單獨保留更改並留下其他更改導致代碼丟失。

任何人都可以讓我知道,如果在GIT中會出現類似於ClearCase或sine的問題,那麼每個SHA1 ID都是唯一的,GIT中不會出現任何Evil雙胞胎問題。

+0

你的個人資料說:「ClearCase管理研究GIT」?我正在做同樣的事情! ;) – VonC 2010-05-26 06:19:01

+0

:)過去3.5年來我一直參與ClearCase,現在我們正在從CC遷移到GIT。所以我一直在嘗試GIT中的各種選項並檢查CC中的問題是否出現在GIt中。 而馮,你對大多數問題的回答是非常有幫助的,謝謝你。 – 2010-05-26 06:51:58

+0

「現在我們正在從CC遷移到GIT」你真幸運。我正試圖在我的公司偷偷摸摸地看看Git。經過8年多的ClearCase和Subversion(偶爾有Perforce或CM Synergy),這是令人耳目一新的;) – VonC 2010-05-26 06:58:11

回答

7

GIT中在整個樹的級別進行跟蹤,而不是單個文件和目錄,因此它沒有像OID這樣的概念。

當合幷包含對文件不兼容的更改的歷史記錄(例如,兩個文件都添加了不同的內容)時,Git將產生合併衝突並停止以讓用戶解決衝突或中止合併。

當然,Git不能強制用戶做合併做正確的事情,但也許更難以完全忽略衝突的一方。在Git中,衝突將出現在文件本身中,而不是保存文件的目錄中。換句話說,衝突將與文件的內容有關,而不是應將哪個OID鏈接到目錄中。當然,根據所使用的工具,用戶可能仍然只是按下「在所有衝突中站在我身邊」,但Git不會在意(儘管懶惰的老闆和同事可能會非常在意!)。

0

哦,邪惡的雙胞胎錯誤,這帶我回來。不,你不應該在git中有這樣的錯誤。 Git實際上並沒有跟蹤整個文件,因爲它跟蹤了大量文件。

+0

Git確實會跟蹤整個文件(在存儲庫數據表示中)。但是,構建在存儲庫上的工具可以像跟蹤塊一樣自由出現(如果他們選擇的話)。 – 2010-05-26 04:38:04

+1

看看git社區書(http://book.git-scm.com/1_the_git_object_model.html)或Pro Git(http://progit.org/book/ch9-2.html),看看Greg的什麼談論。 Git確實可以跟蹤整個文件,或者如果您願意,可以跟蹤整個文件的內容。 – Cascabel 2010-05-26 13:04:42

3

不,但有一個detached head。對不起,不能自己:)

會發生什麼是該文件將出現衝突時,第二個開發人員在推之前拉動。當文件完全不同時,顯然它們應該有不同的文件名。然後第二個開發人員會做一些事情(即重命名他的文件,以免發生衝突)。

3

是的,有某種Git中「惡」的操作,而不是出於同樣的原因比evil twins of ClearCase

他們被稱爲evil merge

合併,介紹修改這不會出現在任何父母身上。

也就是說,將代碼放在沒有人要求的代碼中,名爲'邪惡合併',因爲它是註釋文件時解決「git blame」的難題。
這些合併通常與兩個版本合併(而不是簡單的文本衝突)之間的semantic conflict有關。
一個副作用將是,代替添加,刪除或修改一個線路改變時,你最終兩條線,(從兩個版本被合併)在合併結果...

+0

那麼,正如我評論[那](http://stackoverflow.com/q/1461909/85371)它不是一個Git現象;而不是與Git合作的一種不明智的方式。 Git有很多權力讓你做最經常你不應該做的事情! – sehe 2011-04-07 07:07:52