使用git skip-worktree来禁用文件更新,合并问题

时间:2012-07-26 13:19:59

标签: git intellij-idea

我们使用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”选项出了什么问题?是不是应该在合并后存活下来?或者它的行为是出于不同的目的?

谢谢!

1 个答案:

答案 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也可能完全相同)。