使用Pathogen和Git子模块自定义Vim插件束

5
我在不同的机器上使用vim,并希望在它们之间同步我的配置,因此我尝试了使用pathogen安装不同的vim插件的众所周知的方法,将它们作为git子模块保留,例如here所述。
现在,我的.vim文件夹是一个git仓库,其中包含每个.vim/bundle文件夹中的子模块。我将主要仓库上传到bitbucket并从其他机器克隆它,在进行一些git submodule initgit submodule update之后,我可以像想要的那样在所有机器上获得相同的配置。
现在的问题是当我需要在其中一些插件中进行一些自定义时。例如,有些子模块只是vim配色方案。假设我想更改注释的颜色。哪种方法是正确的?
我想到了一些想法:
  1. 如果我直接修改.vim/bundle/vim-github-colorscheme/colors(例如),那么据我所知,我应该将这些更改推送到主vim-github-colorscheme存储库,但我不能这样做,而且无论如何都很荒谬。我的自定义本质上是私有的。但是,如果我不与子模块存储库同步,那么这些更改将无法从我的其他机器上查看。
  2. 如果我将自己的配色方案定制保存在.vim/colors中,则这些更改将成为主要存储库的一部分,并且它们将很容易在机器之间共享,但这将破坏pathogen的“bundle”哲学。此外,我不清楚如何以这种方式实现其他类型的自定义(例如,修改某些snipMate片段,甚至修改插件的代码)
  3. 我应该制作一个插件的私人分支,将其上传到bitbucket,并将其用作子模块,而不是使用原始插件?这样,我至少可以正确地执行第1个方法,但这不是一个好选择。特别是因为我事先不知道是否需要自定义插件,因此这将迫使我“以防万一”地对每个新的vim插件进行分叉。
  4. 我可以将bundle的代码保存在单个git存储库中,即根本不使用子模块。这将使我有自由修改它们,将修改与我的bitbucket存储库同步并在所有机器上使用一个git pull部署它们。但是,这种方式当插件的原始源发生更改时,将难以将其与我的自己的修改合并。
我已经没有想法了,以上所有内容在某些方面都似乎是错误的。使用git和pathogen的人如何管理这种情况?
2个回答

4

对于您的使用情况,3是最好的解决方案。您无需系统地创建所有这些分支:只有在真正需要更改某些内容并替换原始子模块时才分叉插件。

话虽如此,我使用了3和4的混合:我的插件不是子模块,我已经分叉了其中两个插件以进行自定义。


好的,但我猜需要进行更多的配置才能够合并原始仓库中的更改。如果我使用3,除了我的分叉副本之外,我还应该将原始仓库添加为上游,对吗?如果我使用4..,该怎么做呢? - JLDiaz
我的观点是你不应该关心原始仓库。如果你的更改是“私有的”,正如你所说,根据定义,它们并不意味着要推送到上游。如果你觉得很容易,在GitHub上发起一个拉取请求,所以,如果我是你,我不会过多考虑这个问题。无论你对自己的fugitive分支做什么,你都没有原始仓库的提交权限,所以...为什么要费心呢。成为一个好的GitHub用户和在这种琐事上浪费时间是两回事。 - romainl
抱歉造成困惑。我原本的意思不是推送我的更改,而是从原始存储库中拉取更改并将其与我的自定义合并。我认为这样做很有道理,可以始终保持最新状态并保留我的自定义内容。 - JLDiaz
只需将原始存储库作为您自己的分支中的远程存储库即可。您是正确的,必须进行大量配置。我不确定所有这些都值得如此多的努力:那只是编辑器的配置文件,而不是付费项目,可以在桌子上放钱,所以我通常不太关心。我的配置是一个单一的git存储库,我很少使用插件,要么已经过时,要么非常稳定,我不花太多时间“管理”所有这些和“保持最新状态”。您的焦虑有些可以理解(并且广泛分布),但没有根据。 - romainl

1
有另一种解决方案。使用Git的子树合并,您可以获取所有插件的官方存储库副本,并每个都有自己的分支。然后,在其中一个分支中,它们全部存在,您可以随心所欲地编辑插件,如果要更新,则检出每个插件的分支,进行更新,然后将其合并回到它们共存的分支中。
您对插件的更改将按预期合并。
它为您提供了所有的灵活性,并解决了问题,但设置有点麻烦,保持更新也很麻烦。

使用git-subtree管理Pathogen的方法在此处有详细解释:http://endot.org/2011/05/18/git-submodules-vs-subtrees-for-vim-plugins/。 - mahemoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接