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