Git:Zombie子模块

时间:2017-01-31 00:03:11

标签: git git-submodules

所以我以某种方式设法创建了一个zombie git子模块。

$ cat .gitmodules 
[submodule "Source/CrashProbe"]
    path = Source/CrashProbe
    url = https://github.com/bitstadium/CrashProbe.git

git认为子模块没有跟踪:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Source/CrashProbe/

Deinit没有工作:

$ git submodule deinit Source/CrashProbe
error: pathspec 'Source/CrashProbe' did not match any file(s) known to git.

这也不是:

$ git rm --cached Source/CrashProbe
fatal: pathspec 'Source/CrashProbe' did not match any files

......尽管如此:

$ ls .git/modules/Source/CrashProbe/
FETCH_HEAD      gitdir          objects
HEAD            hooks           packed-refs
branches        index           refs
config          info            sourcetreeconfig
description     logs

这也不是:

$ git config -f .git/config --remove-section Source/CrashProbe
fatal: No such section!

......尽管如此:

$ cat .git/config
...
[submodule "Source/CrashProbe"]
    url = https://github.com/bitstadium/CrashProbe.git

关于我到目前为止所见到的所有SO答案已经耗尽,所以我的问题是:我如何摆脱这个混乱并拥有一个合适的子模块?

2 个答案:

答案 0 :(得分:1)

尝试手动删除子模块文件和声明。

  • 修改您.gitmodule以删除Source/CrashProbe
  • 删除你的Source/CrashProbe文件夹(简单删除,不需要git命令,因为它无论如何都是未跟踪的)
  • 检查您的.git/modules文件夹,删除其中的所有Source/CrashProbe跟踪。

完成后,添加并提交(以恢复干净状态)。

然后再次尝试你的git submodule add命令

git submodule add -- https://github.com/bitstadium/CrashProbe.git Source/CrashProbe

答案 1 :(得分:1)

Aaaand事实证明我忘了做git commit

我如何讨厌git及其神秘的界面......

编辑:我创建了子模块,但在我的提交中没有包含子模块目录。这使得repo处于不一致状态(.gitmodules已提交,子模块未提交)。我们说,Git的错误报告缺乏。