【问题标题】:How to recover deleted .git/modules folder如何恢复已删除的 .git/modules 文件夹
【发布时间】:2016-05-02 12:02:28
【问题描述】:

在我的项目中 .git/modules 文件夹被删除了。现在我可以将父分支重置为其他版本,但子模块更新不起作用。

我收到的错误:

fatal: Not a git repository: ../.git/modules/abc.
Unable to find current revision in submodule path 'abc'

如何恢复已删除的文件夹并让子模块与父分支保持一致。

回购结构是这样的:

parent_folder---|---abc
                |---def

abc 和 def 是子模块。

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    您必须再次初始化和更新子模块,

    git submodule init
    git submodule update
    

    它应该下载并更新当前的子模块代码。

    如果它仍然不起作用,请尝试删除子模块并再次添加它

    git submodule add <params>
    

    如果这不能解决它,添加带有--force 标志的子模块

    如果指定了--force,则子模块将被签出(如果合适,使用 git checkout --force),即使在包含存储库的索引中指定的提交已经与子模块中签出的提交匹配。

    【讨论】:

    • 第一种方法无效。此外,在添加子模块时,它给出了一个错误,指出索引已经存在。所以我删除了所有内容并进行了子模块初始化和子模块更新。代码来了,但我在子模块中丢失了以前的分支。有什么办法可以恢复吗?
    • 你删除了文件夹吗?如果您删除了内容,则必须从服务器中提取它们
    • 是的,我删除了示例中提到的 abc 和 def 文件夹。我在 abc 文件夹中有几个工作分支,但我没有执行 git push。
    【解决方案2】:

    我正在扩展 CodeWizard 的答案。

    如果你得到

    致命:.gitmodules 中没有 Submodul-Path 'app/design/Foo/Bar' 的 URL 找到了

    然后执行git rm app/design/Foo/Bargit rm --cached app/design/Foo/Bar再试一次。

    如果你得到了

    致命:找不到子模块“app/code/Foo/Bar”的存储库句柄。

    那可能是因为你删除了.git/modules中的文件夹。

    app/code/Foo/bar 中的子模块 .git 文件只是一个“假”文件,它引用了 .git/modules 中的真实 git repo。它不是一个真正的存储库。如果你打开它,你会看到:

    gitdir: ../../../../.git/modules/app/code/Foo/Bar
    

    所以只需删除文件夹“app/code/Foo/Bar”并重试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 2014-02-03
      • 2015-09-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多