Git config"错误的配置文件行"在子模块中

时间:2015-06-28 10:48:50

标签: git git-submodules git-config

我在Windows和Linux上使用git,最近我遇到了一个只出现在Windows上的奇怪问题......让我们说我有两个项目。两者都在git中版本化,每个都有一个子模块。

项目1

子模块配置位于[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true worktree = ..\..\..\..\plugins\tasks symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = ssh://domain/repo/path fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master ,如下所示:

C:\Projects\project2\.git\modules\doc\preamble\config

项目2

子模块配置位于[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true worktree = ../../../../doc/preamble symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = ssh://domain/another/repo/path fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master ,我也在下面提供:

/

总而言之,配置文件之间唯一真正的区别是工作目录路径中的\git status

问题

我在Git Bash中操作。当我在 Project 1 及其子模块中执行/c/Projects/project1 (devel) $ git status fatal: bad config file line 6 in c:/Projects/project1/.git/modules/plugins/tasks/config fatal: 'git status --porcelain' failed in submodule plugins/tasks /c/Projects/project1/plugins/tasks $ git status fatal: bad config file line 6 in d:/Projects/project1/.git/modules/plugins/tasks/config /c/Projects/project1 (devel) $ git submodule sync -- plugins/tasks/ Synchronizing submodule url for 'plugins/tasks' fatal: bad config file line 6 in c:/Projects/project1/.git/modules/plugins/tasks/config (以及其他一些简单命令)时:

git submodule init

另外,updateupdate --initgit没有输出,也没有改善情况。

当我在 Project 2 中使用worktree = ..\..\..\..\plugins\tasks 时,一切正常。

您认为天真的解决方案是手动替换子模块配置中的斜杠,更精细的解决方案是编写一个脚本,在所有受影响的子模块中执行该操作。

不幸的是,实际上,更改了第一个配置中的路径:

worktree = ../../../../plugins/tasks

为:

/c/Projects/project1/plugins/tasks $ git status
fatal: bad object HEAD

会导致不同的错误:

c/Projects/project1/.git/modules/plugins/tasks/refs/master

当我查看文件0000000000000000000000000000000000000000 时出现了问题,因为内部的SHA1是:

git reset --hard origin/master

此时,在我{{1}}(在子模块中)后,子模块的存储库恢复到可用状态。

但是,首先出现了什么问题?

如果可能的话,我想知道为什么会出现这个问题?这与项目的原始平台有什么关系吗?我是如何初始化子模块的?我想追查问题的原因,以避免将来发生。

1 个答案:

答案 0 :(得分:2)

  1. 尽管在Windows中,git认为像UNIX程序一样,所以正斜杠是正确的。有关在Windows git中使用正斜杠的一些示例,请参阅http://gitbyexample.org/
  2. 你的回购中有什么东西坏了。我不确定是什么,但在与它打架之前,你能否回复?将旧的顶级目录从project1重命名为project1.fubar并重做git clone foo://project1,您的目录应该 结束了。