Git 忽略对已提交文件的更改

标签 git gitignore

我的存储库中有一个配置文件,不应该对其提交更改。

问题是,当我对文件进行更改时,它们会被 git status 获取。我尝试了各种方法来忽略对其的更改。

当我克隆 repo 时如何自动忽略它,这样我对文件所做的任何更改都不应该被 git 获取?

我尝试过的解决方案:

  1. 将文件添加到 .gitignore。似乎不起作用。这是因为文件已经在索引中了吗?

  2. 使用 git update-index --assume-unchanged path/to/file。似乎有些工作,但只是我克隆的仓库的本地工作。其他克隆人需要应用相同的命令。

我已经尝试查看其他答案,但其他解决方案似乎无法正常工作。我觉得这应该很简单,所以任何指导都会有所帮助!

最佳答案

I have a config file in my repo that shouldn't get changes committed to it.

那么...首先不要提交该文件。
提交该文件的通用版本,用于生成实际文件的模板(作为私有(private)非版本文件,添加到您的 .gitignore)。

那一代将在 git checkout 上自动生成。

首先,重命名您现有的文件:

git mv afileToIgnore afile.tpl
git commit -m "record template value file"

然后将 afileToIgnore 添加到 .gitignore 文件:git status 将不再显示要添加/更改的内容。

现在,声明一个污点 content filter driver 将自动重新生成该文件(忽略,因为它在 .gitignore 中)

https://git-scm.com/book/en/v2/images/smudge.png

smudge 脚本(你可以修改):YourScript

copy aFileToIgnore.tpl aFileToIgnore

在版本化的 .gitattributes 中声明内容过滤器驱动程序:

echo 'aFileToIgnore.tpl config' >> .gitattributes

每个克隆该 repo 的用户都需要在本地激活涂抹“配置”内容过滤器驱动程序。

cd /path/to/repo
git config filter.config.smudge YourScript

最后一步是每个用户唯一需要做的一步,以便从每次 git checkout 上自动生成的实际配置文件中获益。


Others who clone need to apply the same command.

是的,但是在这里,如果他们不这样做,他们将根本没有配置文件。
这比在不应该修改文件时准备好修改文件更明显。

关于Git 忽略对已提交文件的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839263/

相关文章:

git - 在 Ubuntu 中从源存储库升级 git

git svn clone 失败并显示 "Failed to strip path"

git - .gitignore 每个文件夹和子文件夹中的所有 .DS_Store 文件

gitignore - 使用 Tower 忽略 gitignore 文件中的 .DS_Store

Gitlab-runner 更改 builds_dir

Git rebase 因冲突而失败,但没有冲突

git - 我更改了我的 github 用户名。如何更新本地存储库以指向新位置?

Git 仍然添加和跟踪在 .gitignore 中标记的文件夹

git - 使用 Git 跟踪本地被忽略的文件

windows - Windows 资源管理器中的 .gitignore 空白