想象一下,有一个项目的git(称为旧回购)。在某种程度上,它被当作下一代而分叉。在下一代中,有人对项目结构进行了广泛的重构(根据某些标准重命名文件夹和文件等等)。这也导致了代码中的一些变化。
不幸的是,旧的分支(应该被放弃)上的开发仍在继续,因为他们需要一些安全补丁以及其他什么。
现在,我们有一次希望将旧回购的变更移植到下一代,这样就可以最终将旧回购归档。
我可以想到三种方法:
方法I:
缺点:
在初始fork.
方法II:
structure
中的
缺点:
如果项目结构的更改比重命名一个或两个文件夹要复杂得多,那么两次更改项目结构是很费劲的。
方法III:
patch-file
的初始形式之后,
缺点:
最好的是什么?有什么想法或其他建议吗?
发布于 2022-06-09 09:15:08
我们曾经面临过类似的问题。我们的解决方案是写一个补丁转换器。
这个补丁是由git format-patch创建的,这样就可以保存像authorship和提交消息这样的提交信息。转换器将补丁中的路径替换为新存储库中的对应路径。
假设旧的存储库结构如下
.
└── a
└── a.txt 新的存储库结构类似于
.
└── aa
└── a.txt 旧存储库中提交的修补程序如下所示,在a/a.txt中添加了新行。
From e9d29ded75f26d37ece9b9084bd15598b4f02fe8 Mon Sep 17 00:00:00 2001
From: ElpieKay <ElpieKay@foo.com>
Date: Thu, 9 Jun 2022 16:56:15 +0800
Subject: [PATCH] hello a
---
a/a.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/a/a.txt b/a/a.txt
index e69de29..ce01362 100644
--- a/a/a.txt
+++ b/a/a.txt
@@ -0,0 +1 @@
+hello
--
2.33.0.windows.1在本例中,转换器在以diff --git、--- a/和+++ b/开头的行中用aa/a.txt替换了aa/a.txt。
From e9d29ded75f26d37ece9b9084bd15598b4f02fe8 Mon Sep 17 00:00:00 2001
From: ElpieKay <ElpieKay@foo.com>
Date: Thu, 9 Jun 2022 16:56:15 +0800
Subject: [PATCH] hello a
---
a/a.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/aa/a.txt b/aa/a.txt
index e69de29..ce01362 100644
--- a/aa/a.txt
+++ b/aa/a.txt
@@ -0,0 +1 @@
+hello
--
2.33.0.windows.1然后,我们可以使用git am在新存储库中应用转换后的修补程序。
https://stackoverflow.com/questions/72556560
复制相似问题