如何在不知道URL的情况下将Git回购添加到另一个回购



我有一个文件夹,其中包含一些我克隆并更改的Git repo,我正试图将这些repo添加到我拥有的私人repo中,但我得到的是:

warning: adding embedded git repository: [my repository]
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint: 
hint:   git submodule add <url> [my repository]

如果我在最初克隆转发的URL处添加子模块,我会丢失所做的更改(对吧?)。那么,我应该输入什么URL才能将克隆的repo的本地副本添加到我的新repo中呢?此外,如果我从这些文件夹中删除.git文件,然后将它们作为常规文件夹添加到我的repo中,会发生什么?这能实现我在这里想要做的事情吗?

我有一个文件夹,其中包含我克隆的几个Git转发,并且对…进行了更改

如果您对子模块进行了个人更改(与远程存储库不同的更改),则没有必要保留这些更改。

如果您不再想从这些远程存储库中获取更改,最好的选择是从这些本地存储库中删除.git文件夹。由于您的父目录也是一个git存储库,因此它将把更改保存在这些本地存储库中。

另一种选择是派生那些远程存储库,并将派生的repo的URL作为子模块添加。然后你就可以把你自己的零钱塞进你的叉子里。

子模块只是另一个Git存储库

如果你选择使用子模块,你的系统上至少有两个Git存储库(让我们称之为"你的笔记本电脑",以明确这些存储库在哪里)。您的一个笔记本电脑存储库可能具有ssh://git@github.com/you/yourrepo.gitorigin,而另一个(您的子模块)可能当前具有ssh://git@github.com/them/theirrepo.gitorigin

您在超级项目(you/yourrepo.git克隆)中所做的提交包含您的文件。它们还包含对子模块中特定提交的引用:笔记本电脑上的另一个克隆。您必须在此克隆中进行提交。

对于其他克隆ssh://git@github.com/you/yourrepo.git以获得这些提交的人,他们必须克隆第二个Git存储库。如果你不能将提交推送到ssh://git@github.com/them/theirrepo.git,你需要在某个地方建立一些Git存储库,可以在那里推送提交:例如,ssh://git@github.com/you/theirrepo.git。然后,你将在这里推送子模块提交,这样其他人就可以从这里检索这个Git存储库及其提交。您将更改笔记本电脑子模块的URL;真理之源";复制到这里,在GitHub上。

Everyone现在有两个克隆:他们的ssh://git@github.com/you/yourrepo.git克隆和通过git submodule update --initssh://git@github.com/you/theirrepo.git克隆。因此,ssh://git@github.com/them/theirrepo.git是在ssh://git@github.com/you/yourrepo.git的克隆中创建子模块时列出的URL。

这让人感到困惑,因为有太多的Git存储库在左右滚动并被克隆。每个克隆都有自己的分支名称和签出等等。感觉不像一件简单的事情,1是单个主存储库ssh://git@github.com/you/yourrepo.git的克隆,现在到处都是几十个复杂的东西。这是因为有。

这就是为什么很多人会回避子模块的原因。这也是一种选择。您可以删除包含子模块的存储库,只保留一个签出,然后将这些文件git add发送到您的存储库中。然后返回到简单的单个存储库案例。当然,你不会从他们的存储库中获取历史记录。


1这假设你觉得Git很简单。

最新更新