【问题标题】:"You are on a branch yet to be born" when adding git submodule添加 git 子模块时“你在一个尚未出生的分支上”
【发布时间】:2012-08-06 21:39:03
【问题描述】:

我正在尝试将一些子模块添加到我的 .vim/bundles 目录中,当我尝试添加这个特定的 repo 时,Git 给了我一个我以前从未见过的奇怪错误:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

知道是什么原因造成的吗?

如果我将相同的 repo 克隆到测试目录(不是通过 submodule 命令),它可以正常工作,并创建预期的文件。

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    您需要在现有仓库中添加子模块,该仓库需要处于添加和提交子模块链接的状态,并且子模块仓库本身必须有一个提交签出。

    现在,如果您可以在其他地方创建常规克隆,则子模块 repo 本身必须没问题。但是,看起来submodule add 抱怨如果 repo 是空的,而 clone 不是。 This guy 建议只需再次运行相同的 submodule add 命令即可解决此问题。

    如果内部仓库 为空,请检查您希望 包含 子模块的仓库。切换到您运行 git submodule add 的同一目录,然后运行 ​​git statusgit branch 以验证您的包含 repo 至少创建了一个分支并且没有处于奇怪的状态。

    【讨论】:

    • 我已经验证了所有这些事情。当我将所需的 repo 检出到另一个目录时,它有很多文件和一个 master 分支。我试图将这个作为子模块添加到的仓库位于master 分支上,没有明显的问题(状态返回一些修改过的文件,但仅此而已),最奇怪的是我可以添加其他子模块就好了到这个存储库。
    • 也很奇怪:在我的 OP 发出 fatal 警告之后,git 在 .vim/bundle/vim-scala 留下了一个空目录。我还注意到,即使 .gitmodules 没有被触及,它添加了一些引用此 github.com 回购的行到 .git/config,但在删除这些行后,我仍然收到相同的 fatal 错误消息。
    • +1 啊! This guy suggests this is fixable by just running the same submodule add command again.。我一直在与这个问题作斗争,试图找到一个明智的答案,这最终解决了它。这是针对 MSYS 下的 git 1.8.0 从 BitBucket 创建子模块时使用的,所以如果您处于相同的情况,请先尝试。
    • 添加两次也对我有用。但我不明白为什么。有什么解释吗?
    • 这里也加了两次。我很想知道为什么
    【解决方案2】:

    要修复该错误,您应该删除与.git/modules/ 目录中子模块路径相同的文件夹。首次添加子模块时,子模块的url不正确时会出现此错误。

    【讨论】:

    • 谢谢,成功了。起初有点不明显,因为我正在克隆到 .vim/bundle/vim-scala,所以要删除的路径是 .git/modules/.vim/bundle/vim-scala
    • 如果您在 Windows 上,请注意 .git/modules 下的目录可能不会显示,除非您 dir /AH
    • 在我看到删除 .git/modules/path/to/submodule 目录并尝试重新添加子模块后,我收到错误 您的 .gitignore 文件之一忽略了以下路径:path/to/子模块.
    • @Drew Noakes 删除第一次运行 git submodule add 后创建的 .vim/bundle/vim-scala
    • 这个,和Usel​​ess'的回答解决了我的问题。一个理想的答案是两者的结合。谢谢!
    【解决方案3】:

    如果您添加的子模块没有master 分支,则可能会发生此错误。如果要在添加子模块时使用另一个分支(例如develop),可以使用以下命令:

    git submodule add -b <branch> <repository>
    

    【讨论】:

    • 在我的情况下 repo 是新创建的,因此没有任何文件和分支(是空的),所以 git submodule add -b master &lt;repo.git&gt; &lt;folder&gt; 帮助
    • 这是我的问题,我的子模块只有 2 个分支,没有一个是 master 你的解决方案对我有用。
    【解决方案4】:

    正如@drew-noakes 所提到的,这可能是由于尝试使用 .gitignore 文件中列出的目录名称添加子模块造成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 2018-11-18
      • 2011-06-03
      • 2012-02-16
      • 2015-07-07
      相关资源
      最近更新 更多