在我自己的repo中使用git子模块

在我自己的repo中使用git子模块,git,vim,git-submodules,pathogen,Git,Vim,Git Submodules,Pathogen,我是git的新手,所以这个问题可能真的很愚蠢,抱歉。我的意思是,我甚至发现这里关于stackoverflow的问题和我的非常接近,但仍然不知道如何正确地解决问题 我有github repo和我的点文件,包括vim。我在vim中使用了病原体,这是获得插件的自然方式 git submodule add https://github.com/msanders/snipmate.vim.git vim/bundle/snipmate ... git submodule init git submodul

我是git的新手,所以这个问题可能真的很愚蠢,抱歉。我的意思是,我甚至发现这里关于stackoverflow的问题和我的非常接近,但仍然不知道如何正确地解决问题

我有github repo和我的点文件,包括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
我在什么地方找到的。我只是将最后四个命令添加到安装脚本中,以便在每次克隆此repo时运行

第一个问题
git状态
总是显示给我

# modified:   vim/bundle/snipmate (untracked content)
# ...
#已更改但未更新:
部分和
git add vim/bundle/snipmate
没有帮助。这很烦人

第二个问题是我显然不想保留snipmate片段作为默认值,我想更改它们,因为病原体片段存储在snipmate文件夹中,该文件夹是子模块,而不是我自己的repo。当然,我可以在那里简单地
克隆
它们,甚至创建其中一些分支,但这似乎不是一个好的解决方案:

  • 它把我自己的代码和别人的代码弄乱了,可以在github上找到
  • 我不是真的要修改snipmate,我要配置它
  • 所有这些东西使得更新由30部分组成的插件变得复杂甚至不可能

也许有人能帮你找到一个“正确”的答案?

你可以从阅读以下内容开始:你自己的代码片段的默认推荐位置是(假设你的东西在
~/.vim
下)
~/.vim/snippets/.snippets
。插件目录之外,子模块之外


是的,Git子模块很酷,但它们可能不是管理Vim配置的完美解决方案

我使用snipmate和vim的病原体。病原体使使用子模块成为可能(而且更容易!)

我的snipmate插件安装在此处:

.vim/bundle/snipmate
.vim/bundle/snipmate-snippets
我的代码段安装在此处:

.vim/bundle/snipmate
.vim/bundle/snipmate-snippets
下面是一个示例代码段:

.vim/bundle/snipmate-snippets/snippets/c.snippets
我还有一个带有代码片段的特定于工作的回购协议。他们在这里:

.vim/bundle/work/snippets/cpp.snippets
只要在您的运行时路径中有一个snippets文件夹(
: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子模块git pull origin
,也可以更容易地修改更新并将更新推还给维护人员。

是的,当使用病原体时,它将是.vim/bundle/snipmate/snippets/。当然,我仍然可以创建自己的.vim/snippets/,但默认集仍将加载。其想法是将您自己的代码片段放在它们自己的位置,以便您可以在不覆盖代码片段的情况下更新snipmate。我不知道您的问题是什么。不附带默认代码段:您必须单独安装它们。如果您不喜欢它们并想使用自己的代码段,只需不要安装软件包并将代码段放入
~/.vim/snippets/
。我想不出一个更简单的设置。如果您像我一样使用,则绝对没有必要将其作为子模块导入,因为该项目已经完全停止了2年。snippets目录的设置是在
:h snipmate
的L189处。是的,我使用的是旧的。谢谢你的提示。不管怎么说,主要的问题是我多次听说将vim插件作为带有病原体的子模块来存储是一个好办法,但在我看来不是。所以问题是:我做错什么了吗?或者这真的不是很方便?我不认为Git子模块适合这个目的,因为你经常会在下载.zip并复制文件更实际的情况下结束。新的snipmate作为子模块是有意义的,因为所有的代码片段都是外部化的:您可以
拉取
一个新版本,而无需覆盖您自己的代码片段。但是,如果您还添加了建议的snippets包,对其进行了更改,并决定
pull
最新版本,该怎么办?分叉是解决第二个问题的唯一正确且好的方法。