Topgit 原理及安装
针对网友 dd 对 topgit 的疑问,我将写作中的 topgit 部分章节摘录如下。关于 dd 问到 windows 如何安装,应该可以在 cygwin 的环境下安装 topgit。我暂时还没有试验,因此并不是十分确定。Windows 下的 Git 我准备专门一章加以介绍,还没有开始呢。 ;-)
后记:Topgit在Windows上部署,参见: http://blog.ossxp.com/2011/03/2392/ 。
5.3.2 Topgit 原理
下面的分支图,是一个近似的 Topgit 实现图(略去了重要的 top-bases 分支)。+---b1--M1---M3--- (特性分支B: refs/heads/t/B) | / / +---a1---a2---a3----M2--- (特性分支A: refs/heads/t/A) | / ---V1----------------V2--- (主线/卖主分支: master) | \ +--------------c1---M4--- (特性分支C: refs/heads/t/C)在上图中,主线上的 V1 是上游的版本的一次提交。特性分支 A 和 C 都直接依赖主线 master,而特性分支 B 则依赖特性分支 A。提交 M1 是特定分支 B 因为特性分支 A 更新而做的一次迁移。提交 M2 和 M4,则分别是特性分支 A 和 C 因为上游出现了新版本 V2 而做的迁移。当然特性分支 B 也要做相应的迁移,是为 M3。 上述的描述非常粗糙,因为这样的设计很难实现特性分支导出为补丁文件。例如特性分支B的补丁,实际上应该是 M3 和 M2 之间的差异,而绝不是 M3 到 a2 之间的差异。Topgit 为了能够实现分支导出为补丁,又为每个特性的开发引入了第二个分支,追踪分支依赖的“变基”。
+---a1---a2 | | | +-------a3---M2--- (特性 B 的变基分支: refs/top-bases/t/B) | / +-------------------V2--- (特性 A 的变基分支: refs/top-bases/t/A) | / ---V1----------------V2--- (主线/卖主分支: master) | \ +-------------------V2--- (特性 C 的变基分支: refs/top-bases/t/C)把上面的两张分支图重合,实际上就可以获得各个特性分支在任一点的特性补丁文件。 上面的特性分支 B 还只是依赖一个分支,如果出现一个分支依赖多个特性分支的话,情况就会更加的复杂,更会体现出这种设计方案的精妙。 Topgit 还在每个特性分支工作区的根目录引入两个文件,用以记录分支的依赖以及关于此分支的说明。
- 文件 .topdeps 记录该分支所依赖的分支列表。该文件通过 tg create 命令在创建特性分支时自动创建,或者通过 tg depend add 命令来添加新依赖。
- 文件 .topmsg 记录该分支的描述信息。该文件通过 tg create 命令在创建特性分支时创建,也可以手动编辑。
5.3.3 Topgit 的安装
Topgit 的可执行命令只有一个 tg 。其官方参考手册见: http://repo.or.cz/w/topgit.git?a=blob;f=README 。 安装官方的 Topgit 版本,直接克隆官方的版本库,执行 make 即可。$ git clone git://repo.or.cz/topgit.git $ cd topgit $ make $ make install缺省会把可执行文件 tg 安装在 $HOME/bin (用户主目录下的 bin 目录)下,如果没有将 ~/bin 加入环境变量 $PATH 中,可能无法执行 tg。如果具有 root 权限,也可以将 tg 安装在系统目录中。
$ sudo prefix=/usr make install我对 Topgit 做了一些增强和改进,在后面的章节予以介绍。如果想安装我改进的版本,需要预先安装 quilt 补丁管理工具。然后进行如下操作。
$ git clone git://github.com/ossxp-com/topgit.git $ cd topgit $ QUILT_PATCHES=debian/patches quilt push -a $ make $ sudo prefix=/usr make install如果您用的是 Ubuntu 或者 Debian Linux 操作系统,还可以这么安装。
- 先安装 Debian/Ubuntu 打包依赖的相关工具软件。
$ sudo aptitude install quilt debhelper build-essential fakeroot dpkg-dev
- 再调用 dpkg-buildpackage 命令,编译出 DEB 包,再安装。
$ git clone git://github.com/ossxp-com/topgit.git $ cd topgit $ dpkg-buildpackage -b -rfakeroot $ sudo dpkg -i ../topgit_*.deb
- 安装完毕后,重新加载命令行补齐,可以更方便的使用 tg 命令。
$ . /etc/bash_completion