我们使用Git,IntelliJ和Maven。我们遇到IntelliJ配置文件的一些问题。例如。 * .iml文件会根据项目是构建还是重新构建或执行“mvn clean
”而不断变化。我们知道IntelliJ中存在一些导致这些文件发生变化的错误。
计划是对所有* .iml文件(以及其他一些文件)使用“git update-index --skip-worktree
”。这样,一个开发人员可以为这些文件维护正确的状态,如果他们必须更改(新的依赖关系或模块)以重新启用跟踪,更改文件然后切换回跳过更改。因此,其他开发人员获取更新的文件,但他们的更改不会被推回到git存储库。
根据http://fallengamer.livejournal.com/93321.html,这有可能发挥作用。
这确实适用于本地测试存储库。但是一旦移动到遥控器,它开始表现不同。 “git status
”显示无需执行任何操作,但切换分支会显示本地更改将被覆盖的消息(主要是*,iml文件被“忽略”),尽管“git ls-files -v
”显示文件上的右旗。
在IntelliJ中,有一个带有相同警告的空窗口,因此相当混乱。
“skip-worktree”选项出了什么问题?是不是应该在合并后存活下来?或者它的行为是出于不同的目的?
谢谢!
答案 0 :(得分:2)
此行为是有意的。
git update-index --skip-worktree
(以及类似选项--assume-unchanged
)旨在隐藏状态的某些修改。当你合并,并且合并即将更改这些文件时,我会说,Git向你发出警告而不是简单地覆盖你的更改是好的。
以下是man git-update-index
对此的说法:
工作目录版本可能存在或不存在。如果存在, 其内容可能与索引版本匹配。写作不是 受此影响,内容安全仍然是第一要务。注意 Git可以更新标记的工作目录文件 skip-worktree,如果这样做是安全的(即工作目录版本 匹配索引版本)
关于IntelliJ的行为,它(以及git status
)也不检查某些文件是否标有此标志,因此当它试图向您显示差异时,它无法找到修改阻止合并。您可以投票赞成与--assume-unchanged
相关的a couple of issues(--skip-worktree
也可能完全相同)。