在每个git pull上以编程方式使用远程文件覆盖特定的本地文件

时间:2012-12-21 11:27:14

标签: xcode git

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

我不关心谁编辑了它以及文件中的新内容。我只想在每次拉动时都有最新的文件版本。目前,每git pull我都有合并冲突

我只是想在每个git pull上覆盖此文件,而不是每次我必须同步我的回购时手动执行git fetch/checkout/reset之类的内容。

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

由于

3 个答案:

答案 0 :(得分:0)

我以为你可以使用Git Hooks,但我没有看到一个人在拉动之前跑步......

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

答案 1 :(得分:0)

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

基本上,您必须使用git attributes为该特定文件指定特定的合并驱动程序,并使用:

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

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

答案 2 :(得分:0)

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

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

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

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

    在这种情况下,解决方案有点复杂(除了修复蹩脚的工具,修改它实际上没有改变的东西......)。您可能正在寻找的是git的假设未更改功能。您可以使用以下命令访问它:

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

    git docu(git help update-index):

      

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