将 git repo 转换为子模块

Sen*_*sei 5 git git-submodules

所以我对整个git主题相当陌生。但我想做的是dotfiles在多台机器上同步。我知道那里有很多教程,并且我了解了基本概念。但我的问题更加具体。

首先,我正在使用 Windows(目前)和Vim. 最重要的是,我用它vundle来管理我的插件。现在插件就是git-repos它们本身了。该目录~/.vim(这是我想要同步的主存储库)包含它们。

所以我的问题是,如何初始化submodule现有存储库?

我现在得到的是一堆绿色文件夹,~/.vim/bundle/...它们代表其他存储库。该git status命令将它们报告为未跟踪的内容(不,这不是我.gitignore在做一些时髦的事情)。

如果您不熟悉绿色文件夹“现象” ,您可能想看看我的存储库。

PS 其中一个子文件夹显示“修改的内容”而不是“未跟踪的内容”,即使我没有碰它。我不知道为什么。

nau*_*101 5

如果您的所有捆绑包只是没有修改的基本克隆,您可以执行以下操作:从 dotfiles 存储库的根目录:

for d in `find .vim/bundle/ -maxdepth 1 -mindepth 1 -type d`
do
    pushd $d
    export url=$(git config --get remote.origin.url)
    popd
    git submodule add $url $d
done
Run Code Online (Sandbox Code Playgroud)

这应该工作得足够好 - 如果任何捆绑包不是存储库,或者如果您手动添加它,那么它只会传递该目录。

然后您可以执行 agit submodule foreach git pull来更新它们,并添加它们以更新您的 dotfiles 存储库的引用。


Von*_*onC 1

每次您看到没有任何显式修改的修改内容时,请检查全局设置 ( core.autocrlf,core.filemode ),这可以在结帐时进行更改。)

对于 中的每个目录.vim/bundle/,您需要:

  • 转到该模块:cd .vim/bundle/aModule
  • 初始化 git 存储库 (git init .),提交并推送到 GitHub 上的新 git 存储库
  • 回到父仓库:(cd ..你在.vim/bundle/
  • git submodule add https:///github.com/tairun/aModule aModule(请注意,如果您愿意,该子模块可以跟踪最新的分支

然后git submodule update --init --remote