我有一个用git管理的django项目。我是git把它推给我的主人。现在,我希望能够将其中一个目录(包括所有子目录)推送到另一个git仓库。如果可能的话,怎么可能呢?
编辑:所以我希望该目录本身就是一个git repo。
答案 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以及不同的提交树+日志,而不会使主项目混乱。