git为所有人提供“假定不变”的文件,而不仅仅是本地

Cap*_*Man 6 git

我有一些部分生成的文件foo,我希望以初始状态签入到存储库中,但是我不希望git注意到任何更改。

我想过把它的.gitignore文件git add -f foo就足够了,但git statusgit diff显示的变化FOO以及git add .添加。反正我能做到这一点吗?

就像git update-index --assume-unchanged foo 但自动为所有人提供的功能,而不仅仅是在本地

事后编辑:有类似问题的处理到这一阵子之后,--skip-worktree最好--assume-unchanged,看到这一问题的原因。神奇地使其适用于所有人的问题仍然存在。


要成为一个更具体一点它的一些文件,它跟踪的内存数据库单元测试需要的线条CREATE USER SA PASSWORD ""GRANT DBA TO SA,如果我删除这个文件时,它就会重新生成这些行不存在。它跟踪两次运行之间的数据库状态,这就是为什么我不希望将其更改检查到存储库中的原因。

我知道这是一个奇怪的情况,弄清楚如何用这些行生成或不跟踪状态可能是一个更好的解决方案。


重现步骤

mkdir test
cd test
git init

echo "hey" > foo
git add .
git commit -m "Add hey to foo"

echo "foo" > .gitignore
git add .
git commit -m "Ignore foo"

echo "bye" > foo
git diff          # will show foo's change
git status        # will show foo has changed
git add .         # will add foo's change to index
Run Code Online (Sandbox Code Playgroud)

hou*_*anb 5

这有点像 hack,但它是一个可行的仅 git 解决方案。

  1. 创建一个仅包含此文件的新存储库,并将此新存储库作为子模块包含在主存储库中。
  2. 使用这个新子模块的标签.gitmodules在主存储库中进行修改。ignore=dirty

所以现在,当修改此文件时,子模块将被标记为脏,但使用存储库的人在检查时不会看到标记为脏的子模块git status。更重要的是,他们可以随意拉动和推送,而无需共享对子模块中的文件所做的更改。