![](/img/trans.png)
[英]Git repo inside git repo, created by go get - convert to submodule
[英]Convert git repo to submodule
所以我对整个git
主题git
陌生。 但是我想做的是在多台机器上同步我的点dotfiles
。 我知道那里有很多教程,我掌握了基本概念。 但我的问题是更具体的一个勾号。
第一件事:我正在使用 Windows(目前)和Vim
。 最重要的是,我使用vundle
来管理我的插件。 现在插件本身就是git-repos
。 目录~/.vim
(这是我要同步的主要存储库)包含它们。
所以我的问题是,如何初始化现有 repo 的submodule
?
我现在得到的是~/.vim/bundle/...
中的一堆绿色文件夹,它们代表其他存储库。 git status
命令将它们报告为未跟踪的内容(不,它不是我的.gitignore
做了一些时髦的事情)。
如果您不熟悉绿色文件夹“现象”,您可能想看看我的 repo。
PS 其中一个子文件夹说的是已修改的内容而不是未跟踪的内容,即使我没有触摸它。 我不知道为什么。
如果您的所有包都只是没有修改的基本克隆,您可以执行以下操作:从 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
这应该足够好 - 如果任何包不是存储库,或者如果您手动添加它,那么它只会传递该目录。
然后你可以做一个git submodule foreach git pull
来更新它们,并添加它们来更新你的 dotfiles repo 的引用。
每次您看到未经任何显式修改的修改内容时,请检查全局设置( core.autocrlf
、 core.filemode
),这可以在结帐时进行更改。)
对于.vim/bundle/
每个目录,您需要:
cd .vim/bundle/aModule
cd ..
(你在.vim/bundle/
)git submodule add https:///github.com/tairun/aModule aModule
(注意这个子模块可以跟踪一个分支的最新情况,如果你想的话) 然后git submodule update --init --remote
。
因为这项工作对我来说似乎是重复的,所以我想分享以下相当长的 git 别名:
git config --global alias.convertGitRepoToSubmodule '!f() { if [ "$#" = 0 ]; then echo "Usage: convertGitRepoToSubmodule <submodule_directory...>" >&2; return 1; fi; cd -- "${GIT_PREFIX:-.}"; for i; do origin="$(cd "$i" && git config --get remote.origin.url)"; ( set -x; git submodule add "$origin" "$i"; ); done; }; f'
然后就这样做:
git convertgitrepotosubmodule $(find .vim/bundle/ -maxdepth 1 -mindepth 1 -type d)
它应该在所有目录上调用git submodule add <the origin> <the dir>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.