通用版本库迁移 ============== 如果读者的版本控制工具在前面的迁移方案没有涉及到,也不要紧,因为很可能通\ 过搜索引擎就能找到一款合适的迁移工具。如果找不到相应的工具,可能是您使用\ 的版本控制工具太冷门,或者是一款不提供迁移接口的商业版本控制工具。这时您\ 可以通过手工检入的方式或者针对Git提供的版本库导入接口\ :command:`git fast-import`\ 实现版本库导入。 手工检入的方式适合于只有少数几个提交或者对大部分提交历史不关心而只需要对\ 少数里程碑版本执行导入。这种版本库迁移方式非常简单,相当于在完成Git版本\ 库初始化后,在工作区重复执行:工作区文件清理,文件复制,执行\ :command:`git add -A`\ 添加到暂存区,执行\ :command:`git commit`\ 提交。 但是如果需要将版本库完整的历史全部迁移到新的Git版本库中,手工检入方法就\ 不可取了,采用针对\ :command:`git fast-import`\ 编程是一个可以考虑的方法\ 。Git提供了一个通用的版本库导入解决方案,即通过向命令\ :command:`git fast-import`\ 传递特定格式的字节流,就可以实现Git版本库的创建。\ 工具\ :command:`git fast-import`\ 的导入文件格式设计的相对比较简单,\ 当理解了其格式约定后,可以相对容易的开发出针对特定版本库的迁移工具。 下面就是一个简单的导入文件,为说明方便前面标注了行号。将这个文件保存为\ :file:`/path/to/file/dump1.dat`\ 。 :: 1 commit refs/heads/master 2 mark :1 3 committer User1 1295312699 +0800 4 data <``\ ,提交时间则采用Unix时间格式。 * 第4-6行是该提交的提交说明,提交说明用\ ``data``\ 数据块的方式进行定义。 * 第4行在\ ``data``\ 语句后紧接着的\ ``< AuthorDate: Tue Jan 18 09:04:59 2011 +0800 Commit: User1 CommitDate: Tue Jan 18 09:04:59 2011 +0800 My initial commit. README | 1 + team/user1.txt | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) 再来看一个导入文件。将下面的内容保存到文件\ :file:`/path/to/file/dump2.dat`\ 中。 :: 1 blob 2 mark :2 3 data 25 4 Hello, world. 5 Hi, user2. 6 blob 7 mark :3 8 data < 1295312799 +0800 14 data < | Date: Tue Jan 18 09:06:39 2011 +0800 | | User2's test commit. | | README | 1 + | team/user2.txt | 1 + | 2 files changed, 2 insertions(+), 0 deletions(-) | * commit 18f4310580ca915d7384b116fcb2e2ca0b833714 Author: User1 Date: Tue Jan 18 09:04:59 2011 +0800 My initial commit. README | 1 + team/user1.txt | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) 下面再来看一个导入文件,在这个导入文件中,包含了合并提交以及创建里程碑。 :: 1 blob 2 mark :5 3 data 25 4 Hello, world. 5 Hi, user1. 6 blob 7 mark :6 8 data 35 9 Hello, world. 10 Hi, user1 and user2. 11 commit refs/heads/master 12 mark :7 13 committer User1 1295312899 +0800 14 data < 1295312900 +0800 22 data < 1295312901 +0800 31 data <