从 .gitmodules 恢复 git 子模块

2024-02-24

我有一个文件夹,它是一个 git 存储库。它包含一些文件和 .gitmodules 文件。现在,当我这样做时git init进而git submodule init,后面的命令输出什么也没有。如何帮助 git 查看 .gitmodules 文件中定义的子模块而不运行git submodule add再次用手?

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

[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

这是该目录的列表:

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 is done


git submodule init仅考虑已在索引中(即“暂存”)的子模块进行初始化。我会写一个简短的脚本来解析.gitmodules,并且对于每个url and path双人运行:

git submodule add <url> <path>

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

#!/bin/sh

set -e

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

这是基于如何git-submodule.sh script https://github.com/git/git/blob/a3fbb2350dcd2d843d1d90b663521222aceb25fe/git-submodule.sh#L132本身解析.gitmodules file.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .gitmodules 恢复 git 子模块 的相关文章

随机推荐