2011-08-22 297 views
10

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

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

回答

21

你可以看看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子模块。

+2

我已经在我的子目录中有代码,所以我想将它们转换为git repo,并将它们推送到新的远程回购(例如github)。你能举一个例子吗?我很抱歉,我在这些东西是如此新手:) – yasar

+1

你想保存在子目录中的一切的历史? –

+0

当我将更大的回购推向其他远程回购时,子模块又如何?这是否包含子模块的文件? – yasar

1

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

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