Нажмите локальное репозиторий git с подрепозиториями (vim)

Я использую Vim и pathogen в качестве менеджера плагинов, и я клонировал множество плагинов в свою папку .vim. Теперь я хочу, чтобы мой пользовательский vim был легко доступен в нескольких системах, поэтому я сделал свой каталог .vim репозиторием git. Я добавил все с помощью «git add». и отправил его в репозиторий битбакет. Теперь, когда я хочу клонировать это репо на другой компьютер, он создает только папки, в которых должны быть плагины, но не файлы. Я предполагаю, что они были добавлены как подмодули автоматически, но я не могу вытащить их оттуда из соответствующих источников с помощью простой команды, такой как «git submodule update», она только говорит: «В .gitmodules не найдено сопоставление подмодулей для пути 'bundle/plugin' . Что мне нужно сделать, чтобы предотвратить это? Заранее спасибо.


person Wouter Standaert    schedule 20.02.2016    source источник


Ответы (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

и так далее. Освойтесь с функциями оболочки, чтобы сделать небольшие производственные циклы удобными:

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

и так далее, это выглядит достаточно удобно.

person jthill    schedule 20.02.2016

Да, вы можете хранить содержимое своего .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). Я также храню в этом репозитории другие запасные файлы (например, различные autoload или ftplugin), и этот скрипт также копирует их.

Вот сценарий ruby, который также выполняет это Цель.

person Jonathan.Brink    schedule 20.02.2016
comment
Это может быть хорошим решением, я обязательно посмотрю на это! - person Wouter Standaert; 21.02.2016