2012-07-26 91 views
1

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

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

根据http://fallengamer.livejournal.com/93321.html这有工作的机会。

这确实适用于本地测试存储库。但是一旦搬到遥控器,它开始表现出不同的表现。 “git status”显示什么必须做,但切换分支带来了当地的变化将被覆盖的消息(主要是*,这是“忽略” IML文件)虽然“git ls-files -v”显示了文件的右旗。 在IntelliJ中有一个空的窗口,它具有相同的警告,所以这相当混乱。

我是怎么得到错误的“跳过worktree”选项?它不应该在合并中生存吗?或者它的行为意味着不同的目的?

谢谢!

回答

2

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

以下是man git-update-index说有关:

工作目录版本可能存在或不存在。如果存在, 其内容可能与索引版本匹配或不匹配。写作不是 受此位影响,内容安全仍是第一要务。注意 了Git可以更新工作目录下的文件,一个被标记 跳worktree,如果它是安全的话(即工作目录版本 匹配索引版本)


由于有关的IntelliJ的行为,它也(和git status)不会检查某些文件是否标有此标志,因此当它试图显示您的差异时,它无法找到阻止合并的修改。您可能会投票给a coupleof issues有关--assume-unchanged(他们可能是完全为--skip-worktree一样好)。

+0

Hallo 但覆盖本地更改是预期的行为。由于IntelliJ一直修改文件,我们不想将它们推回去。只有来自某个开发人员(有意更改标志)的更新才会进入。 但是,这个解决方案有点可疑,因为这些标志也不共享。 感谢您的回复! – wemu 2012-07-27 08:37:20