我在Windows和Linux上使用git,最近我遇到了一个只出现在Windows上的奇怪问题......让我们说我有两个项目。两者都在git中版本化,每个都有一个子模块。
子模块配置位于[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
子模块配置位于[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
另外,update
或update --init
或git
没有输出,也没有改善情况。
当我在 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}}(在子模块中)后,子模块的存储库恢复到可用状态。
但是,首先出现了什么问题?
如果可能的话,我想知道为什么会出现这个问题?这与项目的原始平台有什么关系吗?我是如何初始化子模块的?我想追查问题的原因,以避免将来发生。
答案 0 :(得分:2)
git
认为像UNIX程序一样,所以正斜杠是正确的。有关在Windows git
中使用正斜杠的一些示例,请参阅http://gitbyexample.org/。project1
重命名为project1.fubar
并重做git clone foo://project1
,您的目录应该
结束了。