gpt4 book ai didi

svn - 如何将非结构化 SVN 文件夹转换为主干/分支样式并保留历史记录?

转载 作者:行者123 更新时间:2023-12-05 00:06:57 26 4
gpt4 key购买 nike

我有一个 SVN 存储库,目前的结构如下:

/versions
/1.0.0
/1.0.1
/1.0.2
/1.1.0
/(etc)

这里发生的事情是,当需要开始新版本时,团队成员会复制以前版本的文件夹并重命名该文件夹;然后将该新文件夹添加/提交到 SVN 中。

因此,给定版本文件夹的所有修订历史仅限于在该版本文件夹中所做的更改。 SVN 认为每个版本文件夹中的每个文件都是在创建版本文件夹时重新创建的。

所以我想做的就是把这一系列文件夹转换成传统的trunk/branches/tag SVN结构。

是否有可能以某种方式将这些版本化文件夹中的每一个的修订历史“协调”回一个共同的修订历史树?

最佳答案

澄清一下:当您说他们会添加/提交时,您的意思是他们没有将旧版本的 svn 副本复制到新版本名称,对吗?基于假设我理解正确......

是否可以?是的,但没有到位,也不容易。

我处理这个问题的方法是编写一个脚本,基本上按照你希望的方式重放提交,将新的 repo 转储到 svn 转储文件,使用 svndumptool.py 调整转储文件,可能还有一些自定义脚本来设置日期和作者等。

你也许能够得到 svn 来帮助你解决一些问题。试试这个方法:

复制您的存储库,以便您可以使用它,而不会给其他人造成困惑。然后,在该存储库中,创建 /project /project/trunk , /project/tags/project/branches目录。结帐项目/主干。使用 svn export将 1.0.0 版本的 rev 1 放入主干工作副本。使用 svn log --xml 获取原始提交消息, 使用 svn add添加所有文件,然后提交。这为您提供了最初的起点。

现在,对于每次提交给您的 /version/1.0.0 ,将该变​​更集合并到您的新主干中,使用 svn log --xml 提取提交消息,并提交。
一旦用完对 1.0.0 的提交,执行 svn copy来自 trunktags/1.0.0 .然后使用 svn merge --ignore-ancestry .../version/1.0.0 .../version/1.0.1@xyz (其中 xyz 是 1.0.1 版本的第一次提交)。这应该会为您提供发布过程中发生的任何更改。 (您可能需要进行一些试验才能使其恰到好处。)

对剩余的每个版本重复该过程。

完成后,您将在 /project 下拥有一个具有更好历史记录的存储库。 ,但仍然有旧的丑陋历史/versions .要清除它,请使用 svn dump project创建一个只包含新历史的转储文件。现在你必须做一些自定义脚本并且可能使用 svndumptool.py 自由地修复转储文件中的提交时间戳和作者,从 svn log --xml 中提取该信息输出。您可能需要为您所做的标记提交“发明”此信息。

最后,使用 svn load将该转储文件导入新的存储库。验证您所有新的、光荣的历史看起来都很正常,然后继续使用您的新存储库。

(哦,如果您将初始 svn mkdir /project /project/trunk /project/tags /project/branches 的提交时间戳设置为 1984,您将获得奖励积分。;))

披露:我为 svndumptool.py 做出了贡献

关于svn - 如何将非结构化 SVN 文件夹转换为主干/分支样式并保留历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com