4

有没有办法告诉 git 忽略存储在其源中的文件?由于有问题的文件位于上游存储库中,因此仅将它们添加到 .gitignore 或 .git/info/exclude 是行不通的。

背景

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

我正在使用私有 git 存储库对上游颠覆存储库进行编辑。为此,我有一个 git 存储库,仅用于从 subversion 中提取提交。该 git 存储库通过 cronjob 定期同步。然后我有私有 git 存储库,它们是上游 git 存储库的克隆。我希望 git 不要让我对生成的文件感到厌烦。我对这两个结果中的任何一个都感到满意:我的本地 git 存储库不再跟踪文件(但它们应该由与 svn 同步的存储库跟踪),或者 git 会静默更新我生成的文件但它永远不会提交我的更改和文件将永远不会显示在“git status”的“已更改但未更新:”部分中。

4

1 回答 1

3

git update-index --assume-unchanged可能是您的解决方案。查看手册页以获取更多信息。


  • --assume-unchanged

  • --no-assume-unchanged

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

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

于 2009-12-11T16:00:56.003 回答