首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工程结构变化的Git-Repo分叉

工程结构变化的Git-Repo分叉
EN

Stack Overflow用户
提问于 2022-06-09 07:51:00
回答 1查看 30关注 0票数 0

想象一下,有一个项目的git(称为旧回购)。在某种程度上,它被当作下一代而分叉。在下一代中,有人对项目结构进行了广泛的重构(根据某些标准重命名文件夹和文件等等)。这也导致了代码中的一些变化。

不幸的是,旧的分支(应该被放弃)上的开发仍在继续,因为他们需要一些安全补丁以及其他什么。

现在,我们有一次希望将旧回购的变更移植到下一代,这样就可以最终将旧回购归档。

我可以想到三种方法:

方法I:

  • 与meld或诸如此类的更改不同,手动复制所有更改。

缺点:

在初始fork.

  • Likeliness之后对旧分支执行的所有提交消息的
  • 丢失,以忘记

方法II:

structure

  • Make旧式回购系统是next-gen

  • pull & merge

  • remove remote

  • restore新项目结构

中的

缺点:

如果项目结构的更改比重命名一个或两个文件夹要复杂得多,那么两次更改项目结构是很费劲的。

方法III:

patch-file

  • search/replace路径ins patch-file

  • apply到next-gen

的初始形式之后,

  • 导出都以旧回购方式提交。

缺点:

  • 甚至能用吗?从未尝试过。

最好的是什么?有什么想法或其他建议吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-09 09:15:08

我们曾经面临过类似的问题。我们的解决方案是写一个补丁转换器。

这个补丁是由git format-patch创建的,这样就可以保存像authorship和提交消息这样的提交信息。转换器将补丁中的路径替换为新存储库中的对应路径。

假设旧的存储库结构如下

代码语言:javascript
复制
.
└── a
    └── a.txt 

新的存储库结构类似于

代码语言:javascript
复制
.
└── aa
    └── a.txt 

旧存储库中提交的修补程序如下所示,在a/a.txt中添加了新行。

代码语言:javascript
复制
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

代码语言:javascript
复制
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在新存储库中应用转换后的修补程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72556560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档