2012-04-07 64 views
1

我是git的新手,所以問題可能真的很愚蠢,對不起。我的意思是,我甚至在這裏發現了與我很接近的stackoverflow問題,但仍然不明白如何正確解決問題。使用git submodules和我自己的repo

我有我的dotfiles github回購,包括vim。我使用病原體用vim,所以自然的方式讓插件接縫是

git submodule add https://github.com/msanders/snipmate.vim.git vim/bundle/snipmate 
... 
git submodule init 
git submodule update 
git submodule foreach git submodule init 
git submodule foreach git submodule update 

至極,我發現某處。最後四條命令我簡單地添加到我的設置腳本中,以便每次克隆此回購時都能運行。

的第一個問題是總是git status顯示我

# modified: vim/bundle/snipmate (untracked content) 
# ... 
# Changed but not updated:部分

git add vim/bundle/snipmate沒有幫助。這很煩人。

第二個問題是我顯然沒有魔杖保持snipmate片段作爲默認情況下,我想改變他們,因爲病原體片段存儲在snipmate文件夾,這是子模塊,不是我自己的回購。當然,我可以簡單地clone他們那裏,甚至是創建一些人的一個分支,但似乎並不像一個很好的解決方案:

  • 它打亂了我自己與其他的代碼代碼上可以找到github上;
  • 我不是真的要修改 snipmate,我要配置它;
  • 所有這些使得更新三十部分插件變得複雜甚至不可能。

也許有人可以幫助找到一個「正確的」答案?

+0

分叉是解決第二個問題的唯一正確的解決方案。 – 2012-04-08 22:53:11

回答

0

您可以從閱讀snipmate's doc開始,其中指出您自己的片段的默認推薦位置是(假設您的材料位於~/.vim之下)~/.vim/snippets/<filetype>.snippets。插件目錄之外,子模塊之外。

是Git子模塊很酷,但它們可能不是管理Vim配置的完美解決方案。

+0

是的,當使用病原體時,它會是.vim/bundle/snipmate/snippets /。當然,我仍然可以創建自己的.vim/snippets /,但默認設置將被加載。 – user1094249 2012-04-07 22:55:29

+0

這個想法是把你自己的片段放在他們自己的位置,這樣你就可以更新snipmate而不會覆蓋你的片段。 – romainl 2012-04-08 08:05:08

+0

我不知道你的問題是什麼。 [Snipmate](https://github.com/garbas/vim-snipmate)不附帶默認片段:您必須單獨安裝它們。如果你不喜歡它們並想使用你自己的片段,只需不要安裝這個軟件包並將你的代碼片段放在'​​〜/ .vim/snippets /'中。我想不出一個更簡單的設置。如果您像我一樣使用[舊的snipmate](https://github.com/msanders/snipmate.vim),則完全沒有必要將其作爲子模塊導入,因爲該項目已完全死亡2年。 snippets目錄的設置位於':h snipmate'的L189處。 – romainl 2012-04-08 08:21:51

0

我在vim中使用了snipmate和pathogen。病原使得使用子模塊可能

我snipmate插件這裏安裝(和容易得多!):

.vim/bundle/snipmate 

我的片段都安裝在這裏:

.vim/bundle/snipmate-snippets 

一個例子片斷是在這裏:

.vim/bundle/snipmate-snippets/snippets/c.snippets 

我也有一個工作特定的回購與片段。他們在這裏:

.vim/bundle/work/snippets/cpp.snippets 

只要有一個片段在你的runtimepath(:help rtp)文件夾,你是好。這是病原體的魔力。

設置我的子模塊我所做的:

git submodule add git://github.com/garbas/vim-snipmate.git bundle/snipmate 
git submodule add git://github.com/honza/snipmate-snippets.git bundle/snipmate-snippets 

當我想更新我的vim回購我這樣做:

git pull origin master 
git submodule update --init 

如果我真的改變遠程的子模塊(例如,如果我分叉在GitHub上snipmate,並希望在新的叉指向我的本地回購),我改變.gitmodules做:

git submodule sync 

通過使用子模塊,可以更輕鬆地更新git submodule git pull origin,並且更容易修改並將更新推回給維護人員。