Git:保持特定文件未合并

3

是否可能始终保留一些文件未合并?

我的要求是:

如果有两个分支(A)和(B),并且它们拥有相同的文件。例如,

在分支(A)中,文件“ setup”具有以下内容:

this is setup
in a branch A

在分支(B)中,文件“setup”具有以下内容:
this is setup
in a branch B

这些分支没有未提交的文件(在不同分支中相同文件的不同提交)。 目标是在合并这些分支后保持这些文件不变。How to tell Git to always select my local versionPrevent merging a file from master with Git中提供的解决方案对此无效。因为它们仅在合并时存在冲突时才有效。(好吧,如果我们合并这两个分支,一次就会有冲突。但是如果我们将(A)合并到(B),然后将(B)合并到(A),那么两个分支的文件将变得相同)
Git 有这种可能性吗?

1
您询问如何解决一个方案,而不是如何解决问题。您能退一步并解释一下您为什么想要/需要这个吗?这样我们就可以更好地建议如何做事情。 - Ikke
您是否预计文件会有进一步的更改? - kan
我预计在这个特定的文件以及其他需要合并的文件中会有进一步的更改。 - Esenbek Kydyr uulu
5个回答

4
没有简单的方法在git中完成这个任务,因为git如何处理合并决定了这一点。
我可能错了,但是你似乎想防止配置文件被合并。是吗?因为有更好/其他的方法来处理配置文件。 这个页面解释了如何处理几种情况的一些解决方案。
总结:
- 如果您可以修改程序,请让其他人覆盖您不跟踪的配置文件 - 如果您无法修改程序,请不要跟踪配置文件本身,而是跟踪一个模板。

是的,你说得对。它是一个配置文件。我该如何在主分支和开发分支上保持它们的不同呢? - Esenbek Kydyr uulu
@EsenbekKydyruulu 请阅读我发布的链接。它包含一些替代方案。 - Ikke
谢谢!这些是很好的想法。我不认为它们适用于我的情况,但我觉得我可以使用模板代替实际的配置文件,并以某种方式进行管理。 - Esenbek Kydyr uulu

1

如果您真的需要将它们与主分支和开发分支区分开来,我建议采用Ikke答案中提到的第二个选项,并使用版本2值文件(一个用于主分支,一个用于dev分支),再加上一个模板文件。

拥有多个值文件意味着它们之间不会出现合并问题(每个用户仅修改与当前分支相关的值文件)。
模板文件可帮助内容过滤驱动程序在检出时生成一个私有文件,该文件代表实际的配置文件(使用模板文件的正确语法和正确的值文件,在当前分支之后)。

filter driver


这非常有用,但不幸的是在我的情况下无法工作。因为我有应用程序运行在不同的分支上,并且配置文件会不时更新。'git checkout'只执行一次,但之后会多次'pull'配置文件。 - Esenbek Kydyr uulu
@EsenbekKydyruulu git pull 会触发 checkout 和 filter 触发器。 - VonC

1
在文件所在的目录中创建一个.gitignore文件,然后只需将文件名放入其中!
然后运行以下命令:

git rm -cached path_to_setup.file

这样,它将忽略所有操作中的该文件,如合并、拉取、推送等。
更多信息请参见:https://help.github.com/articles/ignoring-files

忽略该文件会使其在仓库中未被跟踪。我需要被跟踪。 - Esenbek Kydyr uulu

1
有点啰嗦,但是在初始合并步骤中使用--no-commit,然后检出原始文件以确保它没有被覆盖,然后提交。
目前git邮件列表上也有一个“预合并钩子”讨论,这可能也会给您一些选项。git list 您还可以尝试查看git源代码,并添加一个.gitdonotmerge文件(放在同一目录下),类似于.gitignore(重用所有现有的代码;-),并更新合并策略选项,以便解决这种常见的问题。自己解决开源痒点的乐趣!

0

一种选择是使用git update-index --assume-unchanged [file]命令,它将在暂存和提交时忽略文件的更改,但会保留在代码库中。这是一个危险的命令,因为你需要记住当你想要提交更改时,你已经假定了文件没有变化。此外,我不确定这个命令在合并时会有什么影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接