Я использую Vim и pathogen в качестве менеджера плагинов, и я клонировал множество плагинов в свою папку .vim. Теперь я хочу, чтобы мой пользовательский vim был легко доступен в нескольких системах, поэтому я сделал свой каталог .vim репозиторием git. Я добавил все с помощью «git add». и отправил его в репозиторий битбакет. Теперь, когда я хочу клонировать это репо на другой компьютер, он создает только папки, в которых должны быть плагины, но не файлы. Я предполагаю, что они были добавлены как подмодули автоматически, но я не могу вытащить их оттуда из соответствующих источников с помощью простой команды, такой как «git submodule update», она только говорит: «В .gitmodules не найдено сопоставление подмодулей для пути 'bundle/plugin' . Что мне нужно сделать, чтобы предотвратить это? Заранее спасибо.
Нажмите локальное репозиторий git с подрепозиториями (vim)
Ответы (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
и так далее, это выглядит достаточно удобно.
Да, вы можете хранить содержимое своего .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, который также выполняет это Цель.