忽略文件中的本地更改并在拉取时更新它

时间:2016-01-29 09:23:48

标签: git git-push git-pull git-index

我们有一个包含客户端机器提取的文件x.APK的仓库 这些客户端计算机将修改此文件并将其保留在本地以供其使用。

在正常使用情况下,我们会在2-3个月内很快更新此文件 它第一次将文件与x.APK一起拉出来并修改它并将其存储在本地。然后我们更新其他文件并推送。在拉入客户端时,我们得到了本地更改,但由于x.APK没有更改,因此没有冲突 现在有没有办法更新x.APK忽略仅使用git pull对该文件进行的任何本地更改。

git pull由脚本完成,我们无法始终访问客户端。所以运行其他命令会很棘手。

我们尝试过:

git update-index --assume-unchanged

这会忽略更改,但无法提取

使用gitignore它将从客户端和repo中删除我们不想要的文件。

如果有人可以提供帮助,这是一个特殊的案例。

1 个答案:

答案 0 :(得分:0)

这取决于在x.txt中完成的本地修改的性质。

如果这些修改得到了明确定义(而不是x.txt中的所有修改),那么您可以考虑使用content filter driver以便在结帐时生成正确的x.txt

  • 表示您不再使用x.txt版本,而是使用模板版本" x.template"。
    git mv x.txt x.txt.tpl
    x.txt添加到您的.gitignore

  • 然后,在.gitattributes declaration中添加与x.txt个文件相关联的涂抹脚本:

    x.txt filter=updatex
    

smudge
(图片来自" Customizing Git - Git Attributes",来自" Pro Git book")

git config filter.updatex.smudge 'update_x'

style_smudge脚本可以进行版本控制,并且必须从repo外部的文件中获取本地修改内容(意味着那些私有修改),并将其内容注入模板为了生成实际的x.txt

这样,触发更新工作树的git pull会自动使用新更新和本地修改重新生成x.txt