Git开源项目学习总结

2015/03/23

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接

概述

工作中发现Git客户端在处理中文目录时有Bug,利用业余时间定位Bug原因,接触到msysgit,tcl/tk,tortoisegit等开源项目,尝试编译了这些项目,并看了其中一部分代码,现总结如下。

msysgit项目

msysgit是Git for windows的项目名称,项目地址是 https://github.com/msysgit 。 它有好几个子项目。

msysgit

msysgit子项目仓库有一个git子模块指向git仓库,msysgit子项目下有一个msys.bat,双击该脚本会打开一个命令行窗口,进入git目录,然后就可使用make命令进行编译了。

开源项目一般都有很好的文档,下面的网址讲解了如何看源码,如何编译,如何调试Git:

https://github.com/msysgit/msysgit/wiki/How-To-Use-Eclipse-For-Coding-MsysGit

开源项目也会有很完善的测试用例,git源码目录下有一个t目录,保存了很多测试脚本,按照一定的规则组织,做回归测试时便可以跑测试脚本来验证新版本是否引入了Bug。

msys和MinGW的区别:

MinGW项目的目标是提供一种方案,使用GNU C编译器编译生成Windows上运行的不带POSIX调用的可执行程序。但是至少Bash程序需要POSIX调用,因为Bash需要调用fork去创建新进程,但是windows上没有fork调用。因此MSys(Minimal)参与进来,给出了最小的系统,这个系统可在Windows上为Bash提供创建进程等功能。因此Msys带了一个POSIX层(基于老版本的Cygwin),这个POSIX层只给Bash和Perl使用,不能给通过msys编出来的任何程序使用。

故此msys实际上为bash提供了posix层,因此可在这个bash里执行MinGW提供的编译工具链,于是能用MinGW编译工具链编译代码,生成在windows上运行的程序。但是需要注意用mingw工具链编译的代码,不能使用linux专有的系统调用(例如fork),否则会提示链接出错。

所以可以考虑使用msys+MinGW的方式做跨平台开发,这样同一份源代码既可生成在Linux下运行的程序,也可在msys+MinGW环境下编译生成在Window下执行的程序,只是写代码时需要将不同平台专有的代码用宏进行控制,只编译该平台专有的代码,而不编译其他平台专有代码。

Cygwin编译环境和msys+mingw编译环境的区别,Cygwin用dll模拟Linux环境”欺骗”应用程序,而mingw在编译时提供Linux到Windows目标代码的转换,用的还是windows运行库。故此Cygwin环境下编译出来的程序必须在Cygwin终端环境下运行,并且依赖于Cygwin.dll,不可脱离Cygwin.dll单独运行。而msys+mingw编译出来的程序可单独运行,它只依赖于windows自带的库,并且运行速度也比Cygwin编译出来的程序快,因为不用加载Cygwin.dll。故此推荐使用msys+mingw的编译环境做跨平台开发。

tcl/tk项目

tcl项目可生成运行tcl脚本的终端程序,项目地址:

https://github.com/tcltk/tcl

tk项目可生成执行tcl脚本的图形终端程序,项目地址:

https://github.com/tcltk/tk

tcl/win/makefile.vc文档里说明了如何编译tcl,以及如何安装

我用来编译,安装并测试tcl的命令:

1
2
3
4
"C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin\\vcvars32.bat"
nmake -f makefile.vc release
nmake -f makefile.vc install INSTALLDIR=E:\\tcl
nmake -f makefile.vc test TESTFLAGS="-file encoding_bb.test"

tcl/tests/README详细介绍了如何跑测试用例

tcl/win目录有一个VC6的工程tcl.dsw,可用Visual studio打开,然后可在Visulal studio里编译该工程并调试代码,非常方便。

tortoisegit项目

项目地址:

https://code.google.com/p/tortoisegit/

tortoisegit/build.txt详细的说明了如何编译安装,还说明了如何生成安装包。

总结

  • 1)\t开源项目一般都有很好的文档,会讲述如何编译项目,如何看项目的源码,如何调试,常见问题一般也都会有解答
  • 2)\t开源项目一般有很完善的测试脚本,可用于做回归测试,修改代码时不用太担心引入新Bug,像git源代码t目录下有非常多的测试脚本,并且按照一定的规则组织测试用例
  • 3)\t开源项目的学习过程,先掌握基本用法,然后再学习源码,看文档,掌握编译安装过程,然后调试,接下来分析源代码如何组织,分析架构
  • 4)\t开源项目对提交日志要求比较严格,需注意格式,提交日志最后需填写Signed-off-by,表示这个patch是由谁写的。
  • 5)\t平常写代码时针对某个问题改好后就直接提交代码了,测试如果测出问题,则修改好再次提交,可能反复提交多次,但是Git代码维护者对提交要求还是比较严,会要求将这多个提交合并成一个提交
  • 6)\t有些开源项目会使用持续集成服务,像Git使用了buildhive,当有开发者向git提交了pull request,buildhive会自动处理这个pull请求,拉下最新的代码,并合并开发者提交的代码,然后编译安装,并测试,测试完之后会在开发者提交的pull请求下创建评论,说这个pull 请求是否有问题,这样省去了Git代码维护者的很多工作。
  • 7)\t开源项目还是非常活跃的,与维护者沟通时能很快得到维护,从开源项目那可以学到很多东西

¥打赏5毛

取消

感谢您的支持,我会继续努力的!

扫码支持
赏个5毛,支持我把

打开支付宝扫一扫,即可进行扫码打赏哦

本篇目录