Git子模块的问题

时间:2013-03-10 12:46:22

标签: git git-submodules

我正在尝试将文件添加到以前以某种方式添加为子模块的git仓库中。我不知道是怎么回事。

我无法在任何地方找到.gitmodules文件,我的.git/config看起来像这样:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:frankV/dotfiles.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

我需要包含vim vundle的目录,但由于上述问题,我不能。到目前为止,我无法将其从此存储库中删除,或者在vundle目录下添加任何文件。

当我尝试添加文件时,我得到:fatal: Path '_vim/bundle/vundle/autoload/vundle' is in submodule '_vim/bundle/vundle'

和我的git状态输出:

...
#   modified:   _vim/bundle/Command-T (untracked content)
#   modified:   _vim/bundle/The-NERD-Commenter (untracked content)
#   modified:   _vim/bundle/The-NERD-tree (untracked content)
#   modified:   _vim/bundle/matchit.zip (untracked content)
...

正如你所看到的那样,vundle不在这个列表中,并且没有跟踪这些子模块,因为它们是通过vundle安装的...但更有理由让vundle工作!

1 个答案:

答案 0 :(得分:1)

您有一个嵌套的存储库,使用find . -name .git找到它,如果您真的想要导入无历史记录的源,则可以git rm其包含的目录并删除.git目录本身。为了不丢失当前的历史记录,你可以从中获取并且子树合并分支,但是以最小的努力保留结构和历史的最佳位置就是保持repo结构不变。

Git调用嵌套存储库子模块,并且有一个命令来帮助您管理gruntwork - 例如,子模块的主要存储库通常由第三方托管(例如,您在git://github.com/gmarik/vundle.git),所以submodule命令设置一些基础设施,以帮助宣传任何repo的客户端可以找到子模块的主要内容 - 但是子模块命令所做的一切都是对这类普通任务的帮助。没有其他git命令有任何线索是否将repo用作子模块,因为它不需要关心。

所以你正在做的是尝试将其他人正在进行的项目的结果用作你自己项目中的构建块,并且这样做的git方法就是尽可能以最直接的方式做到:克隆他们的项目并将其用作您自己的一部分。 This other answer I wrote可能是TMI,它是关于将项目拆分为子模块,但它是另一种看待概念是多么简单和直接。