2010-05-26 126 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