使用病原体和git子模块自定义vim包

时间:2013-07-10 09:20:08

标签: vim customization git-submodules pathogen

我在不同的机器上使用vim并希望保持我的配置在它们之间同步,所以我尝试了使用pathogen来安装不同的vim插件的众所周知的方法,将它们保存为git子模块,例如{{ 3}}

现在我的.vim文件夹是一个git repo,其中包含.vim/bundle中每个文件夹的子模块。我将主要的repo上传到了bitbucket并从我的其他机器上克隆了它,在一些git submodule initgit submodule update之后,我在所有这些机器中得到了相同的配置。

现在问题出现了,我需要在其中一些插件中进行一些自定义。例如,一些子模块只是vim colorschemes。假设我想改变,说出评论的颜色。这是正确的方法吗?

我想到了一些想法:

  1. 如果我直接修改.vim/bundle/vim-github-colorscheme/colors(例如),然后AFAIK,我应该将这些更改推送到主vim-github-colorscheme仓库,我不能,而且无论如何都会是荒谬的。我的自定义本质上是私有的。但是,如果我不与子模块仓库同步,​​则我的其他机器将无法看到这些更改。
  2. 如果我在.vim/colors中保留自己的colorscheme自定义项,那么这些更改将成为主要回购的一部分,它们将很容易在机器之间共享,但这打破了病原体的“捆绑”理念。另外,我不清楚如何通过这种方式实现其他类型的自定义(例如,修改snipMate的一些片段,甚至修改插件的代码)
  3. 我应该创建插件的私有分叉,将其上传到bitbucket,并将其用作子模块而不是原始子模块?这样至少我可以在1中正确地进行这种方法,但它看起来不是一个好的选择。特别是因为我事先并不知道我是否需要自定义插件,所以这会迫使我为每个新安装的vim插件做一个分支“以防万一”。
  4. 我可以将bundle的代码保存在一个git repo下,即根本不使用子模块。这将使我可以自由地修改它们,将修改与我的bitbucket repo同步,并使用单个git pull在我的所有机器中部署它们。但是这样,当在插件的原始源中进行更改时,很难将其与我自己的修改合并。
  5. 我的想法用完了,出于上述原因,上述所有内容对我来说都是错误的。使用git和病原体的人如何管理这种情况?

2 个答案:

答案 0 :(得分:4)

3是您用例的最佳解决方案。您不需要系统地创建所有这些分支:仅当确实需要更改某些东西并用fork替换原始子模块时才分叉插件。

那就是说,我使用了3和4的混合:我的插件不是子模块,我已经制作了两个用于定制目的的叉子。

答案 1 :(得分:1)

还有另一种解决方案。使用Git的子树合并,您可以获得所有插件的官方存储库的副本,每个插件都有自己的分支。然后在你的一个分支中它们一起存在,你可以随意编辑插件,当你想要更新时,你检查每个插件分支,更新它,然后将它合并回到它们所有的分支生活。

您对插件的更改将以您期望的方式合并。

它为您提供了所有的灵活性,并解决了您的问题,但设置起来有点痛苦,并且要保持最新状态。