如何在旧版本的旧 .tar.gz 存档之上重新构建新代码?
Posted
技术标签:
【中文标题】如何在旧版本的旧 .tar.gz 存档之上重新构建新代码?【英文标题】:How can I rebase my new code atop of old .tar.gz archives of old versions? 【发布时间】:2021-12-16 16:05:09 【问题描述】:我正在开发一个项目,其中原始开发人员为每个新版本创建了 .tar.gz。我获取了最新版本,将其放入 .git,并在其上添加了我的补丁。
在过去几个月的多次提交和更改之后,老开发者要求我成为维护者并将其放在 github 上。我想要 rebase 以便所有旧的 .tar.gz 版本作为一个提交存在,然后将我的提交放在这些提交之上,以将旧版本保留在 git 历史记录中,但保留我现有的提交历史记录。
(因为这是有史以来第一次通过 git 公开推送的提交,所以我不在乎用 rebase 破坏 git-hash 历史记录。)
这个解释有两个 .git 树:具有单次提交 .tar.gz 的旧历史树,我称之为“历史”,另一个我称之为“新”,我的提交需要显示在所有历史之上提交。为此,我尝试了以下方法:
第 1 部分,准备历史树:
-
用
git init
启动了一个历史.git 树
使用 cmets 一次提交一个 .tar.gz 以进行发布
第 2 部分,尝试将历史树重新定位为远程:
-
在“新”树上我做了一个
git remote add historical /path/to/historical-tree
使用git checkout -b before-historical-rebase
前往临时测试分支
试过git rebase historical
有很多合并冲突标记为“都已修改”和一些“被我删除”
我认为自从最后一个 .tar.gz 的结尾与我第一次提交的开始相同,这将是干净的,但是我在最后一个 .tar.gz 版本的边界的提交历史和我的第一个commit 没有我想象的那么干净,或者有更好的方法来做到这一点。
你会如何处理这个问题?
【问题讨论】:
【参考方案1】:如果我理解正确:
您的本地开发历史如下所示:* eacfdd14 (HEAD -> master) commit
* eabddd13 commit
* eaacdd12 commit
* ea0bdd11 2.2 latest version from tar.gz
并且你想重新设置它:
* cd22dfaf (historical) 2.2 latest version from tar.gz
* cd21dfae 2.1 version from tar.gz
* cd20dfad 2.0 version from tar.gz
* cd11dfac 1.1 version from tar.gz
* cd10dfab 1.0 first version from tar.gz
为避免重播您最初的“来自 tar.gz 的 2.2 最新版本”提交,请使用 git rebase
和以下参数:
git rebase --onto historical ea0bdd11 master
【讨论】:
原来作者的 .tar.gz 比我所基于的新的 .tar.gz 是我的提交和他的混合。我最终对我所有的旧提交和修复的冲突进行了挑选。以上是关于如何在旧版本的旧 .tar.gz 存档之上重新构建新代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不包含父目录的 Python/tar 中创建 tar.gz 存档?
在没有 exec 的情况下创建 zip 或 tar.gz 存档
如何在不解压缩内容的情况下查看 .tar.gz 存档中特定文件的内容?