#1 楼
如何处理存储库中的存储库一直是git的问题。 Git的子模块是解决这种情况的一种方法,但代价是要增加一些复杂性以进行跟踪。 git站点介绍了子模块。基本思想是保留对与存储库中的路径关联的另一个git存储库的引用。这些引用存储在存储库根目录中的文件
.gitmodules
中(该文件由git管理,请不要管它)。克隆具有子模块的存储库时,会出现一些复杂性:必须显式地git submodule init
创建.gitmodules
文件,然后git submodule update
克隆子模块。如何使用子模块将新的vim插件添加到我的dotfiles存储库(我将这个仓库的~/.vim/
别名为.vim/
)中,该模块使用以下子模块:将会显示您已经修改(或创建)了submodule add
文件,如下所示: Git现在特别对待该路径:它是文件系统上的普通目录(因此vim会正常加载它),但是git status
会将其视为来自其存储库的特定提交。在查看该路径的差异或日志(例如.gitmodules
)时,git会将其显示为单行字符串,如下所示:该插件对应于进入子模块的存储库并签出新的提交,然后将其提交到您的存储库:$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir
评论
谢谢,这看起来就像我想要的东西!
–汤姆
2015年2月6日在19:05
嗯,因为我正在编辑我的一段时间,所以我没有注意到您的答案已经发布。
–muru
2015年2月6日,19:29
#2 楼
您无需将插件存储在VCS中。您也可以使用Vim软件包管理器。从昨天开始,我使用vim-plug:您可以像这样在vimrc中定义插件:使用以下命令安装插件:
call plug#begin('~/.vim/plugged')
Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc
call plug#end()
或者,您可以在
plug#begin()
调用之前将FAQ中的摘录添加到vimrc文件中::PlugInstall
这会将插件放入
~/.vim/plugged
中。您无需将此文件保留在VCS中。如果要在另一台计算机上使用此vimrc,只需在该计算机上调用:PlugInstall
。要删除插件,请将其从vimrc文件中删除并运行: br />
请注意,vim-plug不支持从Vim脚本网站安装脚本,但是这些脚本是在GitHub上镜像的,因此没有必要这样做。还具有一些其他优点,例如更容易更新插件以及按需加载以提高性能。您也没有冒着违反要随vimrc文件分发的插件的许可条款的风险。
另请参见:
是什么
如何在vim / vi中安装插件?
#3 楼
我将vimrc和插件作为存储库的子模块存储在github中。在readme.md文件中,我放了一根衬里,拉出存储库,然后运行安装脚本,这样我就可以将一行复制到编辑器中,并进行所有设置。它的作用不只是vim(但不多)。
https://github.com/Loki-Astari/UnixConfig
要使用它:
cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd
PS。愿意接受任何建议(就像我这个时代以前做过的那样,此后一直没有碰过它)。
注意:我最喜欢的部分是它也设置了git并将其设置为使用vim作为git的diff工具。 Vimdiff是最好的diff工具。
#4 楼
如果您想坚持使用“病原菌”,一种方法是使用Git子模块。当您添加子模块时,git会将其识别为来自另一个存储库,并保留其内容(除非已更改,否则在执行git status
时,它将显示为未跟踪内容)。如果您所有基于Github的插件都在bundle/
中,那么将它们作为子模块添加是具有良好外壳的相当简单的任务:for f in bundle/*/
do
git submodule add $(awk '/url =/{print }' "$f/.git/config") "$f"
done
如果将文件添加到子模块,或进行一些不影响存储库的更改,则
git status
仍会抱怨子模块具有未提交的更改或未跟踪的文件。您可以通过将ignore = dirty
添加到.gitmodules
文件中的子模块配置中,使git忽略此类更改。例如:[submodule "bundle/LaTeX-Box"]
path = bundle/syntastic
url = https://github.com/scrooloose/syntastic.git
ignore = dirty
子模块的一个好处是,子模块的修订版已添加到git存储库中,因此
git init
自动负责检查找出特定的修订版本。您可以通过将ignore = all
添加到.gitmodules
文件中的配置中来丢弃它们,并告诉git忽略子模块。例如:[submodule "bundle/LaTeX-Box"]
path = bundle/LaTeX-Box
url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
ignore = all
最后,一个命令将它们全部更新!
git submodule foreach git pull
忠告:我是子模块的新手。我不太确定他们的行为。
评论
vim-pandemic是无需使用子模块即可增强病原体的另一种方法。大流行处理远程存储库,由病原体处理运行时路径。这确实意味着需要两个工具,但是对于“应该”分别处理的不同任务。
–贾兰布
2015年2月9日在10:43
任何人都可以评论为什么病原体自述文件中的tpope可能会说为什么子模块不可行吗?我也不知道子模块(而且即使没有插件管理器,我的解决方案也对我非常有效),但我猜反子模块的人群中有很多有趣的话要说。
–dash-tom-bang
16-2-22在18:11
@ dash-tom-bang我没读那么多,因为他说你不应该使用子模块。我认为他只是说这不是他的首选方法。
–丰富
18年3月13日在15:27
TBH使用了几年之后,我对子模块感到恼火。我现在建议不要使用它们。我现在使用vim-plug,这只会使我的生活更轻松。
–muru
18年3月13日在15:40
#5 楼
您可以仅将以下行添加到.gitignore
中,以忽略所有插件,而不提交它们:因为它们已经是github仓库。我猜你的意思是您不想重复代码,但是我听说它说您应该继续复制依赖项的代码,这样您就可以始终返回到代码中的特定点并知道它会工作。以下是詹姆斯·肖尔(James Shore)发表的一些相关文章:http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build,http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle。他在谈论编程代码和npm(与vim相对),但是我认为该论点仍然适用,您需要一个可靠的环境来编写或编写代码。评论
“您可以将这行添加到您的.vimrc ...中。”您是说.gitignore吗?
–user72
2015年2月6日,19:38
评论
我觉得这可能太以意见为导向;没有客观的“最佳”选择,有很多好的选择,每种选择都有其优缺点。同样,有关嵌套存储库的一点点将问题更多地归入“ using git”类别,而对vim的关注则更少。也许如果您专注于vim或vim插件遇到的特定问题,而又尝试将配置存储在github上的话?如果您愿意,我可以对其进行编辑以发挥出最佳效果;我的意图是问更多“我该怎么做?”问题,同时承认我思考问题的方式可能并不理想。
这可能会有所帮助,但这可能只会使它成为“事物清单”问题(同样,有许多不同的方法可以有效地做到这一点)。如果您想为有关如何处理此类问题的讨论做出贡献,那么当前有一个关于此类问题的meta主题。
编辑。我希望我已经更清楚地问我:“我该怎么做?”
只需使用neobundle之类的插件管理器即可。