1

我正在尝试将文件添加到以前以某种方式添加为子模块的 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 的目录,但由于上述问题,我不能。到目前为止,我无法从这个 repo 中删除它或在 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 工作的更多理由!

4

1 回答 1

2

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

Git calls nested repositories submodules, and does have a command to help you manage the gruntwork --- for instance, submodules' primary repos are often hosted by third parties (yours at git://github.com/gmarik/vundle.git for instance), so the submodule command sets up some infrastructure to help advertise where any of your repo's clients can find the submodules' primaries --- but everything the submodule command does is assistance with mundane tasks like that. No other git command has any clue whether a repo is being used as a submodule or not, because it doesn't have to care.

所以看起来你正在做的是试图使用别人正在进行的项目的结果作为你自己项目中的构建块,而 git 的方法就是以最直接的方式简单地做到这一点:克隆他们的项目并将其用作您自己的一部分。 我写的另一个答案可能是 TMI,它是关于将项目拆分为子模块,但它是对这个概念的简单和直接的另一种看法。

于 2013-03-10T17:38:29.963 回答