使用子回购推送本地git仓库(vim)

时间:2016-02-20 15:01:25

标签: git vim bitbucket git-submodules pull

我正在使用Vim和pathogen作为插件管理器,我已经将很多插件克隆到我的.vim文件夹中。现在我希望我的自定义vim可以在多个系统上轻松访问,所以我在我的.vim目录中创建了一个git repo。我用'git add'添加了所有内容。并将其推送到bitbucket存储库。现在每当我想将这个repo克隆到另一台计算机时,它只会创建插件所在的文件夹,而不是文件。我猜它们是自动添加为子模块的,但我似乎无法通过简单的命令(例如'git submodule update')将它们从各自的源中拉出来,它只是说“在.gitmodules中找不到子模块映射用于路径'bundle / plugin' 。 我需要做些什么来防止这种情况? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

你的.vim是你自己的,所以你可以告诉它你的提交地点。由于您已经拥有克隆,因此最简单的方法就是直接进行配置。默认值保存在.gitmodules文件中,

git config -f .gitmodules submodule.fugitive.path fugitive
git config -f .gitmodules submodule.fugitive.url https://github.com/tpope/vim-fugitive.git

等等。熟悉shell功能,方便小型生产:

make-github-submodule () {
        git config -f .gitmodules submodule.$1.path $1
        git config -f .gitmodules submodule.$1.url https://github.com/$2.git
}

make-github-submodule fugitive tpope/vim-fugitive
make-github-submodule vundle VundleVim/Vundle.vim

等等,看起来很方便。

答案 1 :(得分:1)

是的,您可以使用子模块将.vim的内容存储为Git存储库,但我可以建议采用其他方法。

使用一个简单的脚本来管理所有这一切可能会更容易,该脚本将您的插件克隆到pathogen期望的正确位置。

我也介于多台计算机之间,这种方法对我很有帮助。

这是我使用的(Perl脚本):

#!/usr/bin/perl -w   
use strict;

my $dotVimDir;
my $home=$ENV{HOME};
my @repos=qw(
    https://github.com/tpope/vim-fugitive|tpope-fugitive
    https://github.com/tpope/vim-flagship|tpope-flagship
    # etc...
);

sub runCommand($) {
    my ($command)=@_;
    open CMD,"$command |";
    my @output=<CMD>;
    close CMD;
    return @output;
}

MAIN: {
    my $platform=$^O;
    if($platform eq 'linux') {
        $dotVimDir="$home/.vim";
    } elsif($platform eq 'MSWin32') {
        $dotVimDir="$home/vimfiles";
    } else {
        print "unknown platform\n";
        exit 1;
    }

    runCommand("cp -R ./vimplugins/autoload $dotVimDir");
    runCommand("cp -R ./vimplugins/ftplugin $dotVimDir");

    my ($repo,$folderName);
    foreach(@repos) {
        ($repo,$folderName)=split("\Q|",$_,2);

        my $fullPath="$dotVimDir/bundle/$folderName";
        if (-d "$fullPath") {
            runCommand("git -C $fullPath stash -u");
            runCommand("git -C $fullPath pull origin master");
        } else {
            runCommand("git clone $repo $fullPath");
        }
    }

    exit;
}

您可以将此脚本保存在单独的仓库中(可能称为myconfig)。我还在此仓库中保留了其他备用文件(例如各种autoloadftplugin s),此脚本也会复制这些文件。

Here is a ruby script也可以实现这一目标。