0

我有一个 XML 文件,我们认为它是 git 中的二进制文件。该文件是外部修改和提交的。

我不关心谁编辑了它以及文件中有什么新内容。我只想在每次拉取时都拥有最新的文件版本。这时,每次git pull我都有一个合并冲突

我只是希望这个文件被覆盖在 every 上,而不是像每次我必须同步我的 repo 时git pull手动做的事情。git fetch/checkout/reset

小心:我只想覆盖那个文件,而不是每个文件。

谢谢

4

3 回答 3

0

此答案显示了如何始终为特定文件上的冲突合并选择本地版本。但是,在回答的中途,作者还描述了如何始终使用远程版本。

本质上,您必须使用git 属性为该特定文件指定特定的合并驱动程序,其中:

echo binaryfile.xml merge=keepTheirs > dir/with/binary/file/.gitattributes
git config merge.keepTheirs.name "always keep their file during merge"
git config merge.keepTheirs.driver "keepTheirs.sh %O %A %B"
git add -A
git commit -m "commit file for git attributes"

然后keepTheirs.sh在你的创建$PATH

cp -f "$3" "$2"
exit 0

请参阅该答案以获取详细说明。

于 2012-12-21T12:44:27.640 回答
0

我以为你可以使用Git Hooks,但我没有看到有人在拉之前运行......

一种可能的解决方法是制作一个脚本来删除此文件并与所需的链接git pull...

于 2012-12-21T11:38:44.450 回答
0

如果对文件的更改不是实际更改,则不应提交它们。这将使您的版本历史变得混乱并导致许多问题。

从您的陈述中我不太确定是哪种情况,但有两种可能性:

  1. 有问题的文件是一个本地存储文件,其内容与您的实际源代码无关。在这种情况下,该文件应该是您的 .gitignore 的一部分。

  2. 此文件实际上是您的源代码的一部分,因此将来会有相关更改。通过像您计划的那样设置合并设置,一旦此文件实际更改,您将造成麻烦。因为合并将是破坏性的。

    在这种情况下,解决方案会稍微复杂一些(除了修复这个糟糕的工具,它会改变它实际上并没有改变的东西……)。您可能正在寻找的是假设未更改的 git 功能。您可以使用以下命令访问它:

    git update-index --assume-unchanged <file>
    

    git 文档(git help update-index):

    您可以将“假设未更改”位设置为您未更改的路径,以导致 git 不执行此检查。请注意,在路径上设置此位并不意味着 git 将检查文件的内容以查看它是否已更改 - 它使 git 忽略任何检查并假设它没有更改。当您对工作树文件进行更改时,您必须在修改它们之前或之后通过删除“假设不变”位来明确告诉 git。

于 2012-12-21T15:19:12.833 回答