1

我们使用 Git、IntelliJ 和 Maven。我们在 IntelliJ 的配置文件中遇到了一些问题。例如,*.iml 文件会根据项目是构建还是重新构建或mvn clean执行“”而不断变化。我们知道 IntelliJ 中有一些错误会导致这些文件发生更改。

计划是git update-index --skip-worktree对所有 *.iml 文件(以及其他一些文件)使用“”。这样,开发人员可以为这些文件维护适当的状态,并且如果他们必须更改(新的依赖项或模块)以重新启用跟踪,更改文件然后切换回跳过更改。所以其他开发人员获得了更新的文件,但他们的更改不会被推送回 git 存储库。

根据http://fallengamer.livejournal.com/93321.html这有可能起作用。

这确实适用于本地测试存储库。但是一旦移动到远程它开始表现不同。" git status" 显示不需要做任何事情,但切换分支会显示本地更改将被覆盖的消息(主要是“忽略”的 *,iml 文件),尽管“ git ls-files -v”在文件上显示了正确的标志。在 IntelliJ 中有一个带有相同警告的空窗口,所以这相当混乱。

“skip-worktree”选项有什么问题?它不应该在合并中幸存下来吗?还是它的行为是为了不同的目的?

谢谢!

4

1 回答 1

2

这种行为是有意的。 git update-index --skip-worktree(以及类似的选项--assume-unchanged)旨在隐藏状态中的一些修改。当您合并,并且合并即将更改这些文件时,我会说,Git 会警告您而不是简单地覆盖您的更改,这很好。

以下是man git-update-index关于此的内容:

工作目录版本可能存在或不存在。如果存在,其内容可能与索引版本匹配或不匹配。写入不受该位影响,内容安全仍是第一要务。请注意,如果这样做是安全的(即工作目录版本与索引版本匹配),Git 可以更新标记为 skip-worktree 的工作目录文件


As about behavior of IntelliJ, it also (as well as git status) doesn't check if some files are marked with this flag, so when it tries to show you differences, it can't find modifications which prevent the merge. You may vote for a couple of issues related to --assume-unchanged (they are probably totally the same for --skip-worktree as well).

于 2012-07-26T14:59:55.743 回答