2012-02-11 117 views
5

可能重复:
Locking binary files using git version control system在Git中,有没有办法将文件标记为“纯”?

我犯它永远不应为合并文件,但覆盖(或许还有一个警告)当其他人拉开。有没有办法完成这个?

+1

它以什么方式“纯”?它可能是派生文件或二进制文件? – cmbuckley 2012-02-11 23:09:20

+0

我想不出另一个字。也许是不可说的?是的,为了我们的目的,让我们说它是一个派生文件。 – 2012-02-11 23:22:35

+0

这听起来很像'我需要Git锁'的论点,虽然措辞不同。你要求的是违背DVCS的精神。 – Perception 2012-02-11 23:24:11

回答

5

这是有点不清楚你的实际情况是什么。你应该问自己的第一个问题是文件是否真的需要被跟踪 - 不可合并的文件通常是派生文件,正如你在评论中所建议的那样,因此不需要(也不应该)被跟踪。

如果你真的需要跟踪它,它是一个二进制文件? Git不会尝试合并二进制文件 - 它们总是显示为合并冲突。 Git很擅长检测二进制文件,所以在这种情况下,你可能是安全的。如果它不是二进制文件,那么你仍然强迫Git适当地处理它。在.gitattributes文件,添加类似:

path/to/file merge=binary 

这将引导其把它当作一个二进制文件进行合并的目的。你也可以,如果你想,定义一个自定义的合并驱动程序。使用merge=my_merge_driver在gitattributes文件,然后在你的gitconfig添加类似:

[merge "my_merge_driver"] 
    name = descriptive name 
    driver = my_script %O %A %B 

的三个参数为脚本是我们共同的祖先版本(O为原件),当前分支的版本(A)和其他分支的版本(%B) - 它们是临时文件,并且合并驱动程序应该执行合并并将结果保留在%A中。有关详细信息,请参阅man gitattributes

+0

即使在快速合并的情况下,这项工作是否还可行? – Carl 2012-10-16 20:49:48

+0

@carleeto只有在文件实际需要合并时才会调用合并驱动程序,而在快进合并中不是这种情况。但是除非你在这里做了与OP不同的事情 - 这并不重要 - 快进合并已经用合并版本覆盖了原始版本。 – Cascabel 2012-10-16 22:51:40

+0

谢谢你。我只是试图保留一些令人讨厌的构建产品,这些产品在主要的回购库中分散了我的注意力:) – Carl 2012-10-17 04:34:14

相关问题