2012-04-07 109 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,并且更容易修改并将更新推回给维护人员。