是否有可能在另一个git仓库中有一个git repo

时间:2011-08-22 16:19:37

标签: git git-submodules

我有一个用git管理的django项目。我是git把它推给我的主人。现在,我希望能够将其中一个目录(包括所有子目录)推送到另一个git仓库。如果可能的话,怎么可能呢?

编辑:所以我希望该目录本身就是一个git repo。

3 个答案:

答案 0 :(得分:22)

你可以看一下git对submodules的支持。您可以将第二个存储库添加为主项目的子模块,例如使用如下命令:

git submodule add git://wherever/blah.git library-code
git commit -m "Added a new submodule called 'library-code'"

当您切换到library-code子目录时,就像父存储库不存在一样 - 您可以更改origin以使用可以推送的传输,然后推送就像它是完全独立。

要指定您希望子模块处于特定版本,您应该更改为子模块并使用git checkout切换到正确的版本。然后,您将更改回主存储库并暂存并使用以下命令提交新的子模块版本:

git add library-code
git commit -m 'Change the submodule version'

主存储库的树只存储子模块应该处于的版本,因此当您推送主存储库时,它不会推送子模块中的任何文件。

为了拆分这个子目录,在保留历史记录的同时,你需要克隆你的原始存储库和用户git filter-branch来重写历史记录,如下面的答案所述:

然后,您可以将其推送到新创建的存储库GitHub存储库,返回到原始项目,删除子目录,并将其替换为如上所述的子模块。

如果您对git概念不是很熟悉,那么这对您来说可能很难 - 我建议您事先阅读git子模块。

答案 1 :(得分:1)

当您对特定目录进行更改,暂存这些更改并提交和推送时,您实际上只是“推送”该目录。

如果其他Git仓库只有你要推送的目录,这就是为什么你想把它作为一个仓库,你可以看一下Git Submodules

答案 2 :(得分:1)

您是否研究过git子模块?它允许git存储库干净地嵌套,但保持完全独立。

这意味着您可以拥有一个子目录,其中包含用于推/拉的不同远程URL以及不同的提交树+日志,而不会使主项目混乱。

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial