代码之家  ›  专栏  ›  技术社区  ›  Mr Fooz

Git:忽略源文件

  •  2
  • Mr Fooz  · 技术社区  · 15 年前

    有没有一种方法可以告诉Git忽略存储在其源文件中的文件?因为有问题的文件在上游存储库中,所以只将它们添加到.gitignore或.git/info/exclude中是不起作用的。

    背景 :

    我的上游存储库中有一些生成的文件。每次我进行本地重建时,这些生成的文件都会更改,并且与提交的版本不同。生成的文件在存储库中,因为许多用户没有生成它们的软件(我也没有能力更改)。这些生成的文件从不手工生成,我也不想将它们提交到我的Git存储库。我有一个单独的机制来将它们推送到主存储库(我无法控制这个单独的机制)。

    我正在使用一个私有的Git存储库对上游的Subversion存储库进行编辑。为此,我有一个Git存储库,用于从Subversion中提取提交。Git存储库通过cronjob定期同步。然后我有了私有的Git存储库,它们是上游Git存储库的克隆。我希望Git不要在生成的文件方面打扰我。我对这两个结果中的任何一个都很满意:本地Git存储库不再跟踪这些文件(但它们应该由与SVN同步的存储库跟踪),或者Git将静默更新生成的文件,但它将永远不会提交我的更改,并且这些文件将永远不会显示在“Git状态”的“已更改但未更新:”部分。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Tordek    15 年前

    git update-index --assume-unchanged 可能是你的解决方案。检查 man page 更多信息。


    • --assume-unchanged

    • --no-assume-unchanged

    当指定这些标志时,不会更新为路径记录的对象名。相反,这些选项设置并取消设置路径的“假定不变”位。当“假定不变”位打开时,Git停止检查工作树文件是否有可能的修改,因此您需要手动取消设置该位,以便在更改工作树文件时通知Git。当在一个文件系统上处理一个大型项目时,这有时会很有帮助,该文件系统具有非常慢的lstat(2)系统调用(例如cifs)。

    此选项还可用作粗文件级机制来忽略跟踪文件中未提交的更改(类似于.gitignore对未跟踪文件所做的操作)。您应该记住,显式的git-add操作仍然会导致文件从工作树中刷新。如果Git需要在索引中修改这个文件,例如在提交中合并时,它将失败(优雅地);因此,如果假设的未跟踪文件在上游发生更改,则需要手动处理这种情况。