5

我在不同的机器上使用 vim 并希望在它们之间保持我的配置同步,所以我尝试了众所周知的方法,即使用病原体安装不同的 vim 插件,将它们保持为 git 子模块,例如此处所述。

现在我的.vim文件夹是一个 git repo,其中包含.vim/bundle. 我将该主存储库上传到 bitbucket 并从我的其他机器上克隆它,经过一些之后git submodule initgit submodule update我在所有这些机器中都获得了所需的相同配置。

现在,当我需要对其中一些插件进行一些自定义时,问题就来了。例如,一些子模块只是 vim 颜色方案。假设我想改变,说出评论的颜色。这样做的正确方法是什么?

我想到了一些想法:

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

我的想法用完了,出于某种原因,以上所有这些对我来说似乎都是错误的。使用 git 和病原体的人如何管理这种情况?

4

2 回答 2

4

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

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

于 2013-07-10T09:38:03.457 回答
1

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

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

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

于 2013-11-21T11:44:02.537 回答