没有子模块的嵌套git存储库?

时间:2010-02-23 11:27:38

标签: git

似乎父级回购中的git repo不包含在父级的提交中,除非它被设置为子模块。是否可以覆盖此行为并将嵌套的git repo视为任何其他目录?我不想通过子模块依赖外部依赖,但想使用git来管理项目中的这些依赖项。

5 个答案:

答案 0 :(得分:7)

1 /您可以通过以下方式覆盖:

  • git config设置:设置环境变量$GIT_DIR
    您将嵌套Git工作树的.git目录定义为外部 .git(嵌套式仓库和主仓库外部)
  • 或者通过设置您的嵌套回购'N'在主要仓库之后,但结帐回购'N'主回购中:
core.worktree

设置工作树根目录的路径。这可以被GIT_WORK_TREE环境变量和--work-tree命令行选项

覆盖

在这两种情况下,我们的想法是拥有一个没有任何.git子目录的嵌套工作树。

2 /对于子模块,嵌套的git repo实际上并不包含在父repo中 在父树中创建special entry以记录外部Git SHA1。

new file mode 160000
index 0000000..4c4c5a2

另见“nature of Git submodules”(答案的第三部分)

答案 1 :(得分:5)

我找到了另一种似乎适合我的方法

如果您git add somefolder/< - 确保最后有/,那么它会添加所有文件,而不是像子模块那样对待它。

此处提到了更多内容:http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb

答案 2 :(得分:2)

另见Are git submodules the only safe way to have working copies within working copies?

实际上,当我遇到当前的讨论时,我关注的是一个与此处解决的问题不同的问题:使用git作为一种归档工具,可以归档已经有一些git工作目录的文件系统树...也许另一个问题更接近我的问题。

答案 3 :(得分:0)

这不是最优雅的解决方案,但值得一提。

如果您压缩包含存储库的文件夹,则可以将其检入外部存储库。

这可能会有所帮助,因为您将拥有完整的完整状态,包括git reflog

答案 4 :(得分:0)

您可以做的最简单(最脏)的事情之一就是重命名.git文件夹

我有这个文件夹结构:

|- .git
|- folders
|- second-repo
     |- .git
     |- folders

我只是在根文件夹中使用了此bash命令:

mv /.git /.not_git

现在,您可以进入second-repo并使用其自己的git来执行命令,这样就可以来回使用这两个git repos。

  

PS:Git子模块是处理此问题的正确方法,但就我而言,我   无法为他们