【发布时间】:2011-11-01 07:12:50
【问题描述】:
我有一个用 git 管理的 django 项目。我正在将它推送给我的主机。现在,我希望能够将其中一个目录(包括所有子目录)推送到另一个 git repo。如果可能的话,怎么可能?
编辑:所以我希望那个目录本身就是一个 git repo。
【问题讨论】:
标签: git git-submodules
我有一个用 git 管理的 django 项目。我正在将它推送给我的主机。现在,我希望能够将其中一个目录(包括所有子目录)推送到另一个 git repo。如果可能的话,怎么可能?
编辑:所以我希望那个目录本身就是一个 git repo。
【问题讨论】:
标签: git git-submodules
您可以查看 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 子模块。
【讨论】:
git filter-branch 步骤 - 您只需将子目录的内容复制到新创建的 git 存储库中,然后将其推送到 GitHub。跨度>
当您对特定目录进行更改、暂存这些更改并提交和推送时,您实际上只是在“推送”该目录。
如果另一个 Git 存储库只有您要推送的目录,这就是您希望将其作为存储库本身的原因,您可以查看 Git Submodules。
【讨论】:
你研究过 git 子模块吗?它允许 git 存储库干净地嵌套,但保持完全独立。
这意味着您可以拥有一个子目录,其中包含用于推/拉的不同远程 url 和不同的提交树+日志,而不会弄乱主项目。
【讨论】: