告诉git永远不要更新文件

告诉git永远不要更新文件,git,gitignore,Git,Gitignore,我在git中有一些文件(即配置文件),我需要放在git repo中,但我不想让它们更新(出于某种原因,运行它们并更改配置文件) 那么,我有没有办法告诉git忽略对文件的任何更改,但保持原始文件仍在repo中?目前,我发现执行类似操作的唯一方法是将文件添加到.gitignore文件中,git直接将文件添加到项目中(使用-f覆盖)。有什么更好的方法吗?您可以使用git更新索引——假设文件没有更改 ——假设unchanged选项可用作 要忽略的粗略文件级机制 跟踪文件中未提交的更改 (类似于.giti

我在git中有一些文件(即配置文件),我需要放在git repo中,但我不想让它们更新(出于某种原因,运行它们并更改配置文件)


那么,我有没有办法告诉git忽略对文件的任何更改,但保持原始文件仍在repo中?目前,我发现执行类似操作的唯一方法是将文件添加到.gitignore文件中,git直接将文件添加到项目中(使用-f覆盖)。有什么更好的方法吗?

您可以使用
git更新索引——假设文件没有更改

——假设unchanged
选项可用作 要忽略的粗略文件级机制 跟踪文件中未提交的更改 (类似于.gitignore的作用 未跟踪的文件)。你应该记住 这是一个显式的git add操作 仍将导致文件被删除 从工作树刷新。吉特 以防失败 需要在索引中修改此文件 e、 g.在提交中合并时;因此 如果假定未跟踪的文件 改变上游,你将需要 手动处理这种情况


我根本不会用git管理那些文件。我会将它们放在你的
.gitignore
中,这样git就会忽略它们,并将模板文件(例如
foo.template
放在git中,用于名为
foo
的文件,或者可能是
template/foo
)。然后,当您克隆repo时,您可以将它们复制出来,并对其进行修改,git在仍然管理模板的情况下不会对这些副本做任何事情。如果您有多个这样的文件,您可以提供一个脚本、make规则或类似的东西来从它们的模板填充所有配置文件,以便于设置


更好的设计是将项目配置与本地配置分开,或者使用可以在单独的本地文件中重写的项目级默认值。项目级文件被提交,本地文件被忽略,并且它们都被使用。也许有些配置设置只对项目有意义,有些仅在本地有意义,在这种情况下,您只需从适当的文件中提取适当的设置;或者您可以使用项目设置作为默认值,并让本地配置覆盖默认值。通过这种方式,您可以一次为每个人更新共享的项目设置,同时不干扰用户的本地设置。当然,这取决于对设置格式的控制;如果您使用的第三方工具以特定格式进行设置,所有设置都混合到一个文件中,那么您可能必须使用模板方法。

提交
。我们通常也会使用示例
文件;但要小心使用过时副本的人。我们还通过将文件提交到repo,然后将其添加到
.gitignore
——进行了欺骗,尽管我只会在必要时这样做。@Uriah是的,你必须小心过时的副本,但是,在任何系统中,如果配置文件本应在本地修改,但其复杂程度足以需要版本控制模板,则需要小心。我还将在我的答案中添加一个关于更好的设计的注释,尽管这个注释可能不可用,这取决于他们是否控制配置文件格式。这似乎对我很有用。虽然当我推git时,这似乎不会发送到更大的回购。这是否正确?:您是对的。这很危险,因为在某些情况下,您的本地文件可能会被来自源的数据覆盖/更新。见第页的讨论