无法`git submodule foreach git pull`

时间:2009-07-20 18:22:03

标签: git repository git-submodules git-pull

此问题基于this thread

我的.gitmodules在我家

[submodule "bin"]
           path = bin
           url = git://github.com/masi/bin.git

我家中的文件夹-structure:

~
|-- [drwxr-xr-x] bin          // this is the folder which I make a submodule
                              // it is also a folder where I have a Git to push my submodule's files
    | -- fileA
    ` -- folderA
    ...

我跑

git submodule init    # I get no output from these commands
git submodule update          

我跑

git submodule foreach git pull

我得到了

Entering 'bin'
fatal: Where do you want to fetch from today?
Stopping at 'bin'; script returned non-zero status.

我修复错误的第一个假设是将path = bin更改为path = /Users/Masi/bin。但是,这并没有解决问题。

如何从我的Git中作为子模块的外部存储库上传内容?

1 个答案:

答案 0 :(得分:5)

这通常是没有配置遥控器时发生的错误 (来自this thread

在很久以前初始化的存储库中运行“git pull”并且不使用.git / config文件指定远程存储库的位置时,这是一个至少修复回归的补丁。

  

更好的信息可能是:

     

没有为您当前的分支配置默认远程,
  并且未配置默认的远程“origin”。

     

我认为该消息在之前的通行证中错过了用户友好的原因   当时无法进入。


因此,此消息表明.git / modules中提到的远程仓库未在.git / config中声明

来自git submodule

子模块不应与遥控器混淆,遥控器主要用于同一项目的分支;
子模块适用于您希望成为源树的一部分的不同项目,而两个项目的历史仍然完全独立,您无法在主项目中修改子模块的内容。

我相信你可能错过了git submodule init的步骤:

子模块初始化

  

初始化子模块,即。将.gitmodules中的每个子模块名称和URL注册到.git / config
  .git/config中使用的密钥是submodule.$name.url   此命令不会更改.git / config中的现有信息   然后,您可以在.git/config中为您的本地设置自定义子模块克隆URL,然后继续进行git子模块更新;如果您不打算自定义任何子模块位置,也可以在没有显式初始化步骤的情况下使用git submodule update --init

如果您的远程仓库(在.git / modules中声明)在.git / config中被充分引用,则不应再出现此错误消息。

在使用(pullin)子模块之前,步骤:

git submodule init
git submodule update

仍然是必要的。