【问题标题】:Ignore local changes in the file and update it on pull忽略文件中的本地更改并在拉取时更新它
【发布时间】:2016-05-06 23:22:32
【问题描述】:

我们有一个 repo,其中包含一个名为 x.APK 的文件,该文件由客户端机器提取。
这些客户端计算机将修改此文件并将其保存在本地以供使用。

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

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

我们试过了:

git update-index --assume-unchanged

这会忽略更改但无法拉取

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

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

【问题讨论】:

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


    【解决方案1】:

    这取决于在 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
      


    (图片来自“Customizing Git - Git Attributes”,来自“Pro Git book”)

    git config filter.updatex.smudge 'update_x'
    

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

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

    【讨论】:

    • 对不起,我应该更具体,它不是 txt,而是一个 android APK
    • @goldsmit409 一个 apk 文件? (en.wikipedia.org/wiki/Android_application_package)。那是一个二进制文件(存档),不是吗?如果是这样,... 没有太多希望在本地修改它(或修改副本,并在每次 apk 更改时报告更改)
    • 是的 apk 是二进制 android 文件,基本上是 android 应用程序的容器文件。似乎我无法实现我想要的。也许修改后的文件必须移出 repo,但这将是一个漫长的过程,希望避免它
    • @goldsmit409 无法使用我提到的内容过滤器驱动程序在每次结帐时为该 apk 重新生成正确的内容?
    • 我将阅读您提到的过滤器,它对我来说是新的,但它是不是像 diff 是从原始文件创建到修改后的文件,然后应用该 diff 之类的东西(大胆猜测)。另外,我想做的修改是推送 APK ~15mb OTA 是一项巨大的网络任务,我们无法远程访问。所以我们推送 diff ~1-2mb 这对我们来说没问题,这就是修改文件的原因
    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多