首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从.gitmodules恢复git子模块

从.gitmodules恢复git子模块
EN

Stack Overflow用户
提问于 2012-06-29 16:50:21
回答 6查看 39.2K关注 0票数 85

我有一个文件夹,是一个git repo。它包含一些文件和.gitmodules文件。现在,当我执行git init,然后执行git submodule init时,后面的命令输出为nothing。如何帮助git在不再次手动运行git submodule add的情况下查看.gitmodules文件中定义的子模块?

更新:这是我的.gitmodules文件:

代码语言:javascript
复制
[submodule "vim-pathogen"]
    path = vim-pathogen
    url = git://github.com/tpope/vim-pathogen.git
[submodule "bundle/python-mode"]
    path = bundle/python-mode
    url = git://github.com/klen/python-mode.git
[submodule "bundle/vim-fugitive"]
    path = bundle/vim-fugitive
    url = git://github.com/tpope/vim-fugitive.git
[submodule "bundle/ctrlp.vim"]
    path = bundle/ctrlp.vim
    url = git://github.com/kien/ctrlp.vim.git
[submodule "bundle/vim-tomorrow-theme"]
    path = bundle/vim-tomorrow-theme
    url = git://github.com/chriskempson/vim-tomorrow-theme.git

下面是这个目录的清单:

代码语言:javascript
复制
drwxr-xr-x  4 evgeniuz 100 4096 июня  29 12:06 .
drwx------ 60 evgeniuz 100 4096 июня  29 11:43 ..
drwxr-xr-x  2 evgeniuz 100 4096 июня  29 10:03 autoload
drwxr-xr-x  7 evgeniuz 100 4096 июня  29 12:13 .git
-rw-r--r--  1 evgeniuz 100  542 июня  29 11:45 .gitmodules
-rw-r--r--  1 evgeniuz 100  243 июня  29 11:18 .vimrc

所以,它绝对是顶级的。不更改git目录,仅执行git init

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-29 16:54:33

git submodule init只考虑已经在索引中的子模块(即"staged")进行初始化。我将编写一个简短的脚本来解析.gitmodules,并为每个urlpath对运行:

代码语言:javascript
复制
git submodule add <url> <path>

例如,您可以使用以下脚本:

代码语言:javascript
复制
#!/bin/sh

set -e

git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
    while read path_key path
    do
        url_key=$(echo $path_key | sed 's/\.path/.url/')
        url=$(git config -f .gitmodules --get "$url_key")
        git submodule add $url $path
    done

这基于git-submodule.sh script本身解析.gitmodules文件的方式。

票数 114
EN

Stack Overflow用户

发布于 2018-11-13 04:30:15

扩展卓越的@Mark Longair的答案,添加关于分支和存储库名称的子模块。

代码语言:javascript
复制
#!/bin/sh

set -e

git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
    while read path_key path
    do
        name=$(echo $path_key | sed 's/\submodule\.\(.*\)\.path/\1/')
        url_key=$(echo $path_key | sed 's/\.path/.url/')
        branch_key=$(echo $path_key | sed 's/\.path/.branch/')
        url=$(git config -f .gitmodules --get "$url_key")
        branch=$(git config -f .gitmodules --get "$branch_key" || echo "master")
        git submodule add -b $branch --name $name $url $path || continue
    done
票数 7
EN

Stack Overflow用户

发布于 2014-06-27 08:20:32

我也遇到过类似的问题。git submodule init正在悄悄地失败。

当我这样做的时候:

git submodule add <url> <path>

我得到了:

The following path is ignored by one of your .gitignore files: ...

我认为.gitignore(d)路径可能是原因。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11258737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档