Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有子模块的嵌套git存储库?_Git - Fatal编程技术网

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

没有子模块的嵌套git存储库?,git,Git,父repo中的git repo似乎不包括在父repo的提交中,除非它被设置为子模块。是否可以覆盖此行为并将嵌套的git repo视为任何其他目录?我不想通过子模块依赖外部依赖关系,但希望使用git在项目中管理这些依赖关系。1/您可以通过以下方式覆盖这些依赖关系: 设置:设置环境变量$GIT\u DIR 将嵌套git工作树的.git目录定义为外部.git(嵌套回购和主回购的外部) 或者将嵌套回购“N”设置在主回购的外部,但在主回购的内部签出该回购“N”: 另见“”(答覆的第三部分) 九年后,

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

1/您可以通过以下方式覆盖这些依赖关系:

  • 设置:设置环境变量
    $GIT\u DIR

    将嵌套git工作树的
    .git
    目录定义为外部
    .git
    (嵌套回购和主回购的外部)
  • 或者将嵌套回购“N”设置在主回购的外部,但在主回购的内部签出该回购“N”:
另见“”(答覆的第三部分)


九年后,这一点非常清楚:

我不想使用子模块或拐杖 例如重命名子目录中的所有
.git/

我只希望Git将我的
.Git/
子目录视为具有任何其他名称的普通目录

布莱恩·m。卡尔森回答:

这是不可能的。
如果不使用子模块,则无法将非裸存储库添加为父存储库的一部分。
Git使用
.Git
目录查找工作树,出于安全原因,不允许签入名为该目录的文件或目录。
允许用户签入
.git
目录将允许将配置和挂钩存储为存储库的一部分,如果有人克隆了任意代码,然后将其更改为 子存储库

另见


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

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

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


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

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

如果您
git添加somefolder/
您可以做的最简单(也是最脏)的事情之一就是重命名
.git
文件夹

我有这个文件夹结构:

|- .git
|- folders
|- second-repo
     |- .git
     |- folders
我只是在根文件夹中使用了这个bash命令:

mv /.git /.not_git
现在您可以进入
第二个repo
并使用它自己的git执行命令,这样您就可以来回使用这两个git repo

PS:Git是处理这个问题的正确方法,但在我的例子中 我不能去拿


我不确定这是否是“管理依赖项”的正确方法,但我提出了两种方法来实现您想要的,再加上一些关于Git中子模块性质的精确信息。听起来您真正想要的是子树合并。这将给您留下一个存储库和一个历史记录。您确定父repo中的git repo不包括在父repo的提交中,除非它被设置为子模块吗?因为这就是我想要的,如果你是对的,那么Git就有现成的。你的方法1a和1b非常适合我,谢谢。我肯定这不是推荐的方法,但我真的需要这种灵活性。谢谢你的全面回答!所以,并没有让git将嵌套的.git目录视为普通目录的选项?@Mr_and_Mrs_\D据我所知,这里有一个针对我的问题的工具:。可能还有其他类似的工具。哎呀,评论中的链接断了(你可能应该删除它并添加到你的答案中),这就是我要找的,但是如果我尝试添加嵌套的.git本身,我会收到一条错误消息:
错误:无效路径'test/data/fixtures/clean/.git/COMMIT\u EDITMSG'错误:无法将test/data/fixtures/clean/.git/COMMIT\u EDITMSG添加到索引致命:添加文件失败
,不过它似乎可以处理实际文件,谢谢,这是一个开始,我见过人们将嵌套的
.git
文件夹重命名为
.checkout\u git
并根据需要重新命名它。这似乎不再起作用,git警告不要添加嵌套的git存储库,并试图将其作为子模块添加到我身上。这似乎对我仍然有效(2021年1月)
|- .git
|- folders
|- second-repo
     |- .git
     |- folders
mv /.git /.not_git