我在git中有一些文件(即配置文件),我需要在git repo中,但我不希望它们更新(出于某种原因,运行它们,make,更改配置文件)。
那么有什么方法可以告诉git忽略对文件的任何更改,但保持原始文件仍然在repo中?目前,我发现这样做的唯一方法是将文件添加到.gitignore文件中,然后git直接将文件添加到项目中(使用-f覆盖)。还有更好的办法吗?
答案 0 :(得分:4)
您可以在文件中使用git update-index --assume-unchanged
。
--assume-unchanged
选项可用作 粗略的文件级机制要忽略 跟踪文件中未提交的更改 (类似于.gitignore的用途 未跟踪的文件)。你应该记住 一个显式的git添加操作 仍然会导致该文件 从工作树上刷新。混帐 如果它会失败(优雅地) 需要在索引中修改此文件 例如合并时提交;从而, 如果假定未跟踪的文件是 改变上游,你需要 手动处理这种情况。
答案 1 :(得分:4)
我根本不会使用git来管理这些文件。我将它们放在您的.gitignore
中,因此git会忽略它们,并将模板文件(例如foo.template
)放入名为foo
或template/foo
的文件中)到git中。然后当您克隆repo时,可以将它们复制出来并进行修改,git将不会对副本执行任何操作,同时仍然可以管理模板。如果你有几个这样的文件,你可以提供一个脚本或制作规则或类似的东西来填充他们模板中的所有配置文件,以便更容易设置。
更好的设计是将项目配置与本地配置分开,或者具有可以在单独的本地文件中覆盖的项目级别默认值。项目级文件被提交,本地文件被忽略,并且它们都被使用。也许某些配置设置只对项目有意义,有些只在本地有意义,在这种情况下,您只需从相应的文件中提取相应的设置;或者您可以将项目设置用作默认值,并让本地配置覆盖默认值。这样,您可以同时为每个人更新共享的项目设置,同时不会干扰人们的本地设置。当然,这取决于对设置格式的控制;如果您使用的是以特定格式设置其设置的第三方工具,所有这些工具都混合到一个文件中,您可能必须使用模板方法。