2013-04-25 77 views
3

因此,我对整个git主题颇为陌生。但我想要做的是在多台机器上同步我的dotfiles。我知道那里有很多教程,我有基本的概念。但我的问题更具体。第一件事:我正在使用Windows(现在)和Vim。最重要的是,我使用vundle来管理我的插件。现在插件本身是git-repos。目录~/.vim(这是我想要同步的主要回购)包含它们。将git回购转换为子模块

所以我的问题是,我如何初始化submodule现有的回购?

我现在得到的是我的~/.vim/bundle/...中的一堆绿色文件夹,代表了其他回购协议。 git status命令报告它们为未跟踪的内容(并且没有它不是我的.gitignore做一些时髦的东西)。

如果您不熟悉绿色文件夹“phenomenon”,您可能需要查看我的回购。

P.S.其中一个子文件夹说修改的内容而不是未跟踪的内容,尽管我没有碰它。我不知道为什么。 。

回答

1

每次你看到没有任何明确的修改修改的内容时,检查全局设置(core.autocrlf, core.filemode),它可以使结账变化)

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

  • 去该模块:(git的初始化)cd .vim/bundle/aModule
  • 初始化git仓库,提交和推到一个新的git仓库在GitHub上
  • 回来父回购:cd ..(你在.vim/bundle/
  • git submodule add https:///github.com/tairun/aModule aModule(注意,此子模块能够track the latest of a branch, if you want to

然后git submodule update --init --remote

+0

感谢您的回答。需要一些时间来测试一切。到目前为止,所有的工作都非常成功,尽管我没有完全按照你的意思去做。我仍然不熟悉像'git submodule update --init --remote'这样的大量链接命令,所以我只能猜测他们做了什么。我可能会在稍后回来并分享我的步骤。但基本上我做的是(从我的回购顶部)'git submodule add [email protected]:user/repo.git bundle/aBundle'。当我遇到'index'错误时,我运行'git rm --cache bundle/aBundle'。从那里我会做一个git子模块更新--init。 – Sensei 2013-04-27 15:25:18

+0

@Sensei:您可能应该将其作为单独的答案发布。这个问题可能并不完全清楚,你的vundle插件是从web *克隆的git repos *,并且你试图用一个基本的子模块替换它们。 – naught101 2015-02-03 13:16:27

3

如果所有的包都只是没有修改基本克隆,你可以做这样的事情:从你的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 

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

然后,你可以做一个git submodule foreach git pull更新它们,并添加它们来更新你的dotfiles回购的参考。

+0

这正是我所需要的。谢谢。顺便说一句,我还添加了一些检查,以确保在试图添加它之前,子模块是git repo。这样我就可以在一个文件夹中使用它,其中一些子文件夹是回收的,有些则不是 – mattgately 2016-07-28 13:49:17