如何在不知道其 URL 的情况下将 Git 存储库添加到另一个存储库?
How to add a Git repo to another repo without knowing its URL?
我有一个文件夹,其中包含一些我克隆并进行了更改的 Git 存储库,我正在尝试将这些存储库添加到我拥有的私人存储库中,但这是我得到的:
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 才能将克隆的存储库的本地副本添加到我的新存储库中?另外,如果我从这些文件夹中删除 .git 文件并将它们作为常规文件夹添加到我的存储库中,会发生什么情况?这会实现我在这里尝试做的事情吗?
I have a folder containing a few Git repos that I cloned and made changes to...
如果您对子模块进行了个人更改(不同于远程存储库的更改),则没有必要保留它们。
如果您不想再从这些远程存储库中获取更改,最好的选择是从这些本地存储库中删除 .git
文件夹。由于您的父目录也是一个 git 存储库,它将保留这些本地存储库中的更改。
另一种选择是您分叉那些远程存储库并将分叉的存储库的 URL 添加为子模块。然后您可以将自己的更改推送到您的分叉中。
一个子模块只是 另一个 Git 存储库。
如果您选择使用子模块,您的系统上将至少有两个 Git 存储库(我们称它为“您的笔记本电脑”以明确它们的位置)。您的一个笔记本电脑存储库可能 origin
为 ssh://git@github.com/you/yourrepo.git
,而另一个(您的子模块)可能 当前 有 origin
为 [=13] =].
您在超级项目(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 --init
,他们对 ssh://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
,现在到处都是许多复杂的东西。那是因为有。
这种事情就是很多人避免使用子模块的原因。这也是一种选择。您可以删除包含子模块的 repository,只保留一个 checkout,然后 git add
这些文件到 your 存储库。然后您将回到简单的单一存储库案例。当然,您不会从他们的存储库中获取历史记录。
1这假设您发现 Git 简单。
我有一个文件夹,其中包含一些我克隆并进行了更改的 Git 存储库,我正在尝试将这些存储库添加到我拥有的私人存储库中,但这是我得到的:
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 才能将克隆的存储库的本地副本添加到我的新存储库中?另外,如果我从这些文件夹中删除 .git 文件并将它们作为常规文件夹添加到我的存储库中,会发生什么情况?这会实现我在这里尝试做的事情吗?
I have a folder containing a few Git repos that I cloned and made changes to...
如果您对子模块进行了个人更改(不同于远程存储库的更改),则没有必要保留它们。
如果您不想再从这些远程存储库中获取更改,最好的选择是从这些本地存储库中删除 .git
文件夹。由于您的父目录也是一个 git 存储库,它将保留这些本地存储库中的更改。
另一种选择是您分叉那些远程存储库并将分叉的存储库的 URL 添加为子模块。然后您可以将自己的更改推送到您的分叉中。
一个子模块只是 另一个 Git 存储库。
如果您选择使用子模块,您的系统上将至少有两个 Git 存储库(我们称它为“您的笔记本电脑”以明确它们的位置)。您的一个笔记本电脑存储库可能 origin
为 ssh://git@github.com/you/yourrepo.git
,而另一个(您的子模块)可能 当前 有 origin
为 [=13] =].
您在超级项目(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 --init
,他们对 ssh://git@github.com/you/theirrepo.git
的克隆。所以 ssh://git@github.com/them/theirrepo.git
是你在 ssh://git@github.com/you/yourrepo.git
.
这让人感到困惑,因为有太多 Git 存储库在四处滚动并被左右克隆。每个克隆都有 自己的 分支名称和签出等等。感觉就像不是一件简单的事情,1 单个主存储库的克隆 ssh://git@github.com/you/yourrepo.git
,现在到处都是许多复杂的东西。那是因为有。
这种事情就是很多人避免使用子模块的原因。这也是一种选择。您可以删除包含子模块的 repository,只保留一个 checkout,然后 git add
这些文件到 your 存储库。然后您将回到简单的单一存储库案例。当然,您不会从他们的存储库中获取历史记录。
1这假设您发现 Git 简单。