在具有不同目录结构的 git 存储库中移动补丁
Moving patches in git repository with different directory structure
对于这个有点冗长和混乱的标题,我深表歉意。我们有一个具有以下目录结构的 git 存储库(root 代表存储库根;名称是虚构的):
/
/dir1/
/dir2/
/dir2/subdir1/
/dir2/subdir2/
一位团队同事使用 /dir2/subdir1
的副本创建了一个新的 git 存储库,即 /dir2/subdir1
成为新存储库的根目录。我们在那个新存储库中做了一些(~15)次提交,然后我们决定要在旧存储库中复制新提交。
执行此操作的最佳方式是什么?
当然,我们可以从新存储库创建一个补丁,并将其作为单个提交应用于旧存储库,但这样做会失去历史的粒度。
在此期间,旧存储库中没有任何提交触及 /dir2/subdir1
,因此肯定不会有冲突。
Option1: 分别为每个提交创建补丁(git format-patch
),并按顺序应用到旧的repo
Option2:将新的 repo 添加到旧的 repo,获取分支,检查本地 repo 上的分支并挑选所有提交(使用 gitk
更简单`)
Option3:将新仓库添加到旧仓库的远程,获取分支,并将其与旧仓库中的分支合并。
希望对您有所帮助!
解决方案是使用 git format-patch
and git am
。在新的存储库中我做了一个
git format-patch $revision
,其中 $revision
是新版本库中的修订版本,它对应于旧版本库的状态,即添加了 /dir2/subdir1
的版本。这创建了大约 15 个文件,其中包含每个提交的补丁。
然后我移动到旧存储库并使用 git am
应用刚刚创建的补丁。我只需要指定必须应用这些补丁的目录:
git am --directory dir2/subdir1 $patches
,其中 $patches
是在上一步中创建的文件。
现在提交已从新回购转移到旧回购,我很高兴!
对于这个有点冗长和混乱的标题,我深表歉意。我们有一个具有以下目录结构的 git 存储库(root 代表存储库根;名称是虚构的):
/
/dir1/
/dir2/
/dir2/subdir1/
/dir2/subdir2/
一位团队同事使用 /dir2/subdir1
的副本创建了一个新的 git 存储库,即 /dir2/subdir1
成为新存储库的根目录。我们在那个新存储库中做了一些(~15)次提交,然后我们决定要在旧存储库中复制新提交。
执行此操作的最佳方式是什么?
当然,我们可以从新存储库创建一个补丁,并将其作为单个提交应用于旧存储库,但这样做会失去历史的粒度。
在此期间,旧存储库中没有任何提交触及 /dir2/subdir1
,因此肯定不会有冲突。
Option1: 分别为每个提交创建补丁(git format-patch
),并按顺序应用到旧的repo
Option2:将新的 repo 添加到旧的 repo,获取分支,检查本地 repo 上的分支并挑选所有提交(使用 gitk
更简单`)
Option3:将新仓库添加到旧仓库的远程,获取分支,并将其与旧仓库中的分支合并。
希望对您有所帮助!
解决方案是使用 git format-patch
and git am
。在新的存储库中我做了一个
git format-patch $revision
,其中 $revision
是新版本库中的修订版本,它对应于旧版本库的状态,即添加了 /dir2/subdir1
的版本。这创建了大约 15 个文件,其中包含每个提交的补丁。
然后我移动到旧存储库并使用 git am
应用刚刚创建的补丁。我只需要指定必须应用这些补丁的目录:
git am --directory dir2/subdir1 $patches
,其中 $patches
是在上一步中创建的文件。
现在提交已从新回购转移到旧回购,我很高兴!