【问题标题】:How to stop tracking a file without removing it from repo如何停止跟踪文件而不将其从存储库中删除
【发布时间】:2011-08-16 00:08:00
【问题描述】:

我有一个想要保存在远程存储库中的配置文件,但我不想在我的计算机上跟踪它的更改。将它添加到 .gitignore 并不能解决问题。

我不想跟踪更改的原因是因为它应该根据计算机的环境而有所不同。

【问题讨论】:

标签: git


【解决方案1】:

如果您想暂时停止跟踪文件,您仍然可以使用

git update-index --assume-unchanged <file>
// track changes again :
git update-index --no-assume-unchanged <file>

【讨论】:

  • 值得注意的是,git reset --hard 也会影响这些文件,因此如果为本地配置文件选择这种方法,则必须记住它们无论如何都会被重置,并且在调用 @987654324 时它们的本地更改会丢失@.
  • 另外我刚刚发现你更新设置为git update-index --assume-unchanged &lt;file&gt;时不能切换分支你必须在切换分支之前做git update-index --no-assume-unchanged &lt;file&gt;
  • 请注意,--assume-unchanged 可能无法按照您的预期工作,并且在某些情况下,git 仍然可以将文件标记为已修改并将其包含在更改中。更多信息请参见stackoverflow.com/questions/23097368/…
【解决方案2】:

如果是这种情况,那么您根本不应该对文件进行版本控制;您应该对文件的模板进行版本控制。例如,如果配置文件是foo/config.txt,那么您应该在存储库中有一个版本化的foo/config.txt.template,并带有示例(或空白)配置设置。 foo/config.txt 根本不应该在存储库中,应该与 .gitignore 一起忽略。

然后,在新的克隆中,您只需将 foo/config.txt.template 复制到 foo/config.txt 并根据需要更改设置。

【讨论】:

  • 但我认为存储库版本应该与您的生产代码相对应
  • @babonk:配置应该被版本化,但它们不一定必须与你的代码一起被版本化。它们可以在生产系统上进行版本控制。如果使用您的代码,您可以将其放在 foo/production-config/config.txt 与开发人员放在 foo/dev-config/config.txt 中,后者使用 cdhowie 建议的模板。
【解决方案3】:

您需要将 .gitignore 文件和 git rm --cached 结合起来。 使用以下命令:

git rm --cached 文件名.txt

这将从索引中删除文件,但会将其保留在您的存储库和工作区中。 应用 rm --cached 后,您需要提交更改才能使其生效。它会在您的跟踪更改中显示为已删除,但这仅仅是因为它已从索引中删除。 注意:如果您在以后的提交中再次对其进行更改,则必须运行: git rm --cached 以取消跟踪特定提交中对文件的更改。

【讨论】:

  • 这正是我正在寻找的!谢谢!
  • 很高兴它帮助了你!
【解决方案4】:

您可以提交所有其他文件,对于本地配置的更改,您可以使用 git 提供的'stash' 功能。

【讨论】:

  • 这不是 stash 的用途。
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多