我想要实现
repo-1
---- 目录1
--- dir1 的内容
repo-2
---- 目录2
--- repo-1 中 dir1 的内容
我们有许多参考可用于将目录内容模式设置为新存储库,但不能将其设置为新存储库的子目录。 我需要将 myRepo1 git 中 dir1 的内容移动到另一个 myRepo2 中的另一个目录,即通过保留提交历史记录将 myRepo1/dir1 的内容移动到 myRepo2/dir2 。 带有 --prefix 的 git read-tree 正在完成这项工作,但不保留历史记录。 git pull 我只能在存在 .git 文件的父文件夹上执行操作。
试试这个;
将
myRepo1
克隆到本地计算机(如果尚未这样做)。
将 myRepo2
克隆到您的本地计算机。
导航至
myRepo1
:cd myRepo1
..
将 dir1
及其内容添加到暂存区:git add dir1/*
..
使用描述性消息提交更改:git commit -m "Move dir1 content to myRepo2"
。
导航至 myRepo2
:cd ../myRepo2
。
使用 git subtree merge
将 dir1
的内容添加到 dir2
: git subtree merge --prefix=dir2 ../myRepo1/dir1 master
它是如何工作的;
git subtree merge
是一个功能强大的命令,可让您将另一个 Git 存储库中的子目录集成到当前存储库中。
--prefix=dir2
告诉git subtree merge
将dir1
的内容添加到dir2
中名为myRepo2
的目录下。
../myRepo1/dir1
指定源子目录(当前位置的相对路径)。
master
指定 myRepo1
中您要集成的分支(如果需要,请替换为所需的分支)。
最后,将更改推送到
myRepo2
:git push origin master。此方法将保留 dir1
内 myRepo2
的提交历史记录。
注: 在执行这些步骤之前,请确保您已在两个存储库中进行了任何必要的拉取或提取。 如果
dir2
已存在于myRepo2
中,则其内容将被dir1
覆盖。