git - 让 git "assume-unchanged"成为每个人的文件,而不仅仅是在本地

标签 git

我有一些部分生成的文件 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 解决方案。

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

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

关于git - 让 git "assume-unchanged"成为每个人的文件,而不仅仅是在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305599/

相关文章:

php - 推送到负载均衡器上的多个 EC2 实例

git - 如何将 MLfLow 与私有(private) git 存储库一起使用?

git - 获取特定日期的 git repo 快照

Github 未获取代码更改,无法提交

git - Tortoise GIT - 显示 merge 后在分支中创建的更改

linux - 使用 Team Explorer Everywhere 命令行 Linux 在不下载所有项目的情况下在 TFS 中创建一个新的高级文件夹

git blame - 忽略未提交的更改

git - 使用 `git push`恢复远程仓库可以吗?

亚搏体育应用程序 CI/CD : Run jobs only when files in a specific directory have changed

TFS 中的 Git - 分支切换 - 'Could not rmdir ...'