【问题标题】:Git keep the original file and not track any changes to itGit 保留原始文件,不跟踪对它的任何更改
【发布时间】:2020-01-30 12:54:08
【问题描述】:

我的存储库中有一个配置文件config.env。我的代码通过 shell 脚本根据一些环境参数对这个文件进行了修改。
我希望不跟踪对此特定文件的更改并继续提交对代码的新更改,同时继续提取原始config.env,即使它可能在运行代码时发生更改。我怎样才能做到这一点?


我再次发布这个问题的原因是使用git update-index --assume-unchanged 的流行答案被文档明确拒绝。

【问题讨论】:

  • 将其添加到 .gitignore 文件 => 不会再次提交。或者在每次提交之前,您可以checkout your_file 保留最新版本 => 这让我更危险
  • 您必须使用git update-index --assume-unchanged <file> 指示 git 忽略对它的更改。每次克隆存储库时都需要执行此操作,即使您签出不同的分支也可能如此。我不使用此命令,因此您必须阅读它。与您一定会在这里遇到的其他 cmets 不同,将文件添加到 .gitignore 将不起作用,因为您可能已经尝试过。这只是为了避免 git add 将其添加到开头。
  • 但是,您最好采用正常的模式来处理配置文件。提交一个模板,如config-template.envconfig.env.template,并将真正的配置文件添加到.gitignore,然后将其从存储库中删除。这允许您对模板进行更改并提交这些更改,同时将实际使用的文件保留在存储库之外。如果可以的话,如果磁盘上缺少使用的文件,您甚至可以添加构建或执行时的步骤来制作模板的副本。
  • 请不要鼓励人们使用git update-index --assume-unchanged。该信息是错误的,the Git documentation 现在明确警告它。

标签: git


【解决方案1】:

最好的方法是创建一个模板文件(例如,config.env.template)并将其存储在存储库中,而忽略您在本地系统上修改的实际文件(config.env)。这样,就可以在存储库中保留对模板文件的更改,同时进行本地修改。

请注意,根据 Git 文档,git update-index --assume-unchanged 虽然通常被推荐,但不能按预期工作,也不应该用于此目的:

用户经常尝试使用假设不变和跳过工作树位 告诉 Git 忽略对被跟踪文件的更改。这不 按预期工作,因为 Git 仍可能检查工作树文件 执行某些操作时的索引。一般来说,Git 不会 提供一种方法来忽略对跟踪文件的更改,因此替代解决方案 推荐。

【讨论】:

  • 嗯,我想没有别的办法了。谢谢!另外,我读过关于不使用 update index 的信息,这是其他类似问题中公认的答案,这就是我再次发布此内容的原因。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多