我有一些部分生成的文件 foo,我想以初始状态将其 checkin 存储库,但我不希望 git 注意到任何更改。
我认为把它放在 .gitignore
文件和 git add -f foo
就足够了,但是 git status
和 git diff
显示 foo 的变化以及 git add .
添加它。无论如何我可以做到这一点吗?
类似于 git update-index --assume-unchanged foo
但它自动为每个人提供,而不仅仅是本地。
Hindsight edit: After dealing with similar problems to this for a while,
--skip-worktree
is preferable to--assume-unchanged
, see this question for why. The problem of magically making it apply to everyone still exists.
更具体地说,它是一些文件,用于跟踪单元测试的内存数据库,需要 CREATE USER SA PASSWORD ""
和 GRANT DBA TO SA
,如果我在重新生成该文件时将其删除,那么这些行将不存在。它在运行之间跟踪数据库的状态,这就是为什么我不希望将其更改 checkin 存储库的原因。
我知道这是一个奇怪的情况,弄清楚如何使用这些行生成它或不让它跟踪状态可能是更好的解决方案。
重现步骤
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
最佳答案
这有点 hack,但它是一个可行的纯 git 解决方案。
- 创建一个仅包含此文件的新存储库,并将此新存储库作为 submodule 包含在您的主存储库中。 .
- 使用
ignore=dirty
修改主存储库中的.gitmodules
这个新子模块的标签。
所以现在,当这个文件被修改时,子模块将被标记为脏的,但是使用存储库的人在检查 git status
时不会看到标记为脏的子模块。更重要的是,他们可以随意 pull 和推,而无需共享对子模块中的文件所做的更改。
关于git - 让 git "assume-unchanged"成为每个人的文件,而不仅仅是在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305599/