2013-07-10 35 views
4

我在不同的機器上使用vim,並希望保持我的配置在它們之間同步,所以我嘗試了衆所周知的方法,使用pathogen來安裝不同的vim插件,將它們保持爲所描述的git子模塊例如here使用病原和git子模塊自定義vim包

現在我的.vim文件夾是一個git repo,它包含作爲子模塊的每個文件夾中的.vim/bundle。我把這個主要的回購上傳到bitbucket並從我的其他機器克隆它,並且在git submodule initgit submodule update之後,我得到了與想要的相同的配置。

現在問題出現時,我需要在這些插件中進行一些定製。例如,一些子模塊就是vim colorschemes。假設我想改變,說評論的顏色。這將是正確的方式來做到這一點?

一些想法來共同我的腦海裏:

  1. 如果我直接修改.vim/bundle/vim-github-colorscheme/colors(例如),那麼據我所知,我應該推動這些變化的主要vim-github-colorscheme回購,這是我不能,將是可笑的呢。我的定製本質上是私有的。但是,如果我不同步子模塊回購,這些更改將不會從我的其他機器可見。
  2. 如果我在.vim/colors中保留我自己的色彩定製,那麼這些更改將成爲主要回購的一部分,並且它們將很容易在機器之間共享,但這打破了「捆綁」病原體的理念。此外,我不清楚如何完成這種方式的其他類型的自定義(例如,修改snipMate的一些片段,甚至修改插件的代碼)
  3. 我應該做一個插件的私人分支,上傳它到bitbucket,並將其用作子模塊而不是原來的模塊?這樣,至少我可以在1中正確地做到這一點,但它看起來不是一個好的選擇。特別是因爲我不知道我是否需要定製插件,所以這會迫使我爲每個安裝的新vim插件做一個分支「以防萬一」。
  4. 我可以將捆綁的代碼保存在一個單獨的git倉庫中,即根本不使用子模塊。這將使我可以自由修改它們,將修改與我的bitbucket repo同步,並將它們部署到我的所有機器中,只需一個git pull即可。但是,這樣,當插件的原始源代碼發生更改時,很難將其與我自己的修改合併。

我用完了所有的想法,上述所有內容因爲某種原因似乎都是錯誤的。使用git和病原體的人如何管理這種情況?

回答

4

3是您的使用案例的最佳解決方案。您不需要系統地創建所有這些叉子:只有當您的真的需要更改某些內容並用叉子替換原始子模塊時,纔會分發插件。

這就是說,我使用3和4的混合:我的插件不是子模塊,我已經爲其定製目的製作了其中兩個插件。

+0

好吧,但我想還需要一些更多的配置才能合併原始回購中的更改。如果我使用3,我應該添加原始回購作爲上游,除了我自己的副本,不是嗎?如果我使用4 ..怎麼可能做到? – JLDiaz

+0

我的意見*是你不應該關心原始存儲庫。如果你的變化是「私人」的,就像你所說的那樣,根據定義,它們並不意味着被推向上游。如果你覺得用github很容易做出一個拉動請求,如果我在你的鞋子裏,我不會想太多。無論你對自己的逃亡分子做什麼,無論如何你都沒有對原始回購的承諾權利,所以......爲什麼要麻煩。成爲一名優秀的github公民是一回事,而另一件事情就是在這樣的頭髮分裂上浪費你的時間。 – romainl

+0

對不起,我感到困惑。我並不是故意推動我的更改,而是在原始倉庫中提取更改並將其與自己的定製合併。我認爲這是有道理的,以便始終保持最新狀態並保留我的定製。 – JLDiaz

1

還有另一種解決方案。使用Git的子樹合併,您將獲得所有插件的官方存儲庫,每個插件都有自己的分支。然後在你的一個分支中它們都存在,你可以儘可能多地編輯插件,當你想更新時,你檢出每個插件分支,更新它,然後將它合併到分支中生活。

您對插件的更改將以您期望的方式合併。

它給你所有的靈活性,並解決你的問題,但它是一個痛苦的設置,這是一個痛苦,保持最新。

+0

使用git-subtree進行病原體解釋:http://endot.org/2011/05/18/git-submodules-vs-subtrees-for-vim-plugins/ – mahemoff