【发布时间】:2015-05-21 19:31:30
【问题描述】:
我有几个 (50+) 个项目不同版本的 zip 存档。我想从这些档案中创建一个存储库(很可能是 git 或 svn)。显然,我可以解压缩最新的存档并将其作为我的初始点,但我想通过导入我存档的所有先前修订来保留代码历史记录。
有没有干净的方法来完成这项任务?
【问题讨论】:
-
所以从最早的版本开始
我有几个 (50+) 个项目不同版本的 zip 存档。我想从这些档案中创建一个存储库(很可能是 git 或 svn)。显然,我可以解压缩最新的存档并将其作为我的初始点,但我想通过导入我存档的所有先前修订来保留代码历史记录。
有没有干净的方法来完成这项任务?
【问题讨论】:
您实际上可以创建一个 git 存储库。克隆存储库,添加您最旧的,然后提交文件。添加另一组文件并重复该过程。
【讨论】:
我假设是 Subversion,因为我不熟悉 git。我也不经常使用 Subversion 命令行,你可能想要导入这么多档案,所以我的说明有点高级。我希望许多考虑因素适用于其他版本控制系统。
您不需要创建新的存储库;您可以使用现有或新存储库中的新目录。新存储库的一个优势是您可以进行试运行,然后从头开始;您甚至可以在临时存储库上练习,然后导入现有存储库。您不想做的是导入它们,删除它们并再次报告它们,因为这会浪费存储库中的空间:仍然存储试用版,但没有任何用处。
在开始之前,您可能会考虑您的档案是否代表纯线性序列,或者是否存在维护branches、发布tags 和主线trunk,它们会在conventional Subversion structure 中找到(另请参阅branch/merge ) 或对其进行一些修改;我稍后会描述那个案例。
我希望你能给每个版本一个日志消息,你和任何同事都会觉得有帮助,但如果它们不是现成的,你可以用一些简单的文本如imported from <archive-name> 导入所有内容,并修改以后的消息,只要 pre-revprop-change hook script 已实现允许更改日志消息。
我将首先在存储库中创建目录,然后执行checkout;如果您import 该目录,您将不得不再次检查它,据我所知。所以checkout你的空目录作为一个新的工作副本。
然后从您的最旧存档开始,将其解压缩到工作副本中,add 所有文件(或所有您想要的文件)并执行您的第一个commit。
对于每个连续的存档,您必须重现以前版本的更改。如果您只是将其解压缩到工作副本中,任何已删除的文件仍将存在,这不是您想要的,并且可能难以自动删除,尽管您可以根据文件日期delete 他们。但是 Subversion 不会介意你是否清空工作副本(除了.svn 目录)“在其背后”,即直接在文件系统中,然后将下一个存档解压缩到其中。当文件重新出现时,Subversion 只会将它们视为新版本。你需要做的是delete(来自Subversion)所有丢失的文件,以及add新的文件(或者rename或copy,如果需要:见下一节)。使用 Tortoise 添加和删除非常简单(确保commit 对话框显示未版本化的文件),但是对于更多的版本和/或大型代码库,您可能希望将其自动化。我不知道那个副手的svn 命令,如果没有其他人想出它们,你需要研究它们;您可能需要处理svn status 的输出以生成所需的操作。
可能更成问题的是复制和/或重命名文件或目录:必须手动处理,除非有一些额外的信息可以使用。 另一方面,您可能会发现不必担心这一点是可以接受的:在这种情况下,如果蓝色同时删除了一个明显不相关的文件(在这种情况下重命名),Subversion 日志将不会向您显示其完整的历史记录,并且您将无法轻松查看重命名/副本中版本之间的更改。
如果新存档用于新分支,您应该使用copy 在存储库中创建分支,将其签出到不同的工作副本,然后如前所述将下一个存档应用到该工作副本。
【讨论】: