Git开源项目学习总结
2016-04-14 10:27
295 查看
概述
工作中发现Git客户端在处理中文目录时有Bug,利用业余时间定位Bug原因,接触到msysgit,tcl/tk,tortoisegit等开源项目,尝试编译了这些项目,并看了其中一部分代码,现总结如下。
msysgit项目
msysgit是Git for windows的项目名称,项目地址是 https://github.com/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的命令:
"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) 开源项目一般都有很好的文档,会讲述如何编译项目,如何看项目的源码,如何调试,常见问题一般也都会有解答2) 开源项目一般有很完善的测试脚本,可用于做回归测试,修改代码时不用太担心引入新Bug,像git源代码t目录下有非常多的测试脚本,并且按照一定的规则组织测试用例
3) 开源项目的学习过程,先掌握基本用法,然后再学习源码,看文档,掌握编译安装过程,然后调试,接下来分析源代码如何组织,分析架构
4) 开源项目对提交日志要求比较严格,需注意格式,提交日志最后需填写Signed-off-by,表示这个patch是由谁写的。
5) 平常写代码时针对某个问题改好后就直接提交代码了,测试如果测出问题,则修改好再次提交,可能反复提交多次,但是Git代码维护者对提交要求还是比较严,会要求将这多个提交合并成一个提交
6) 有些开源项目会使用持续集成服务,像Git使用了buildhive,当有开发者向git提交了pull request,buildhive会自动处理这个pull请求,拉下最新的代码,并合并开发者提交的代码,然后编译安装,并测试,测试完之后会在开发者提交的pull请求下创建评论,说这个pull 请求是否有问题,这样省去了Git代码维护者的很多工作。
7) 开源项目还是非常活跃的,与维护者沟通时能很快得到维护,从开源项目那可以学到很多东西
转载自http://ju.outofmemory.cn/entry/143896
相关文章推荐
- 菜鸟浅学Java I/O总结
- Android系统Camera录像过程分析
- CSDN博客的积分计算方法和博客排名规律
- git使用
- 针对性的一些规范总结,针对thinkphp框架
- jsp js EL springmvc 的困惑。
- zDiaLog弹出层
- sqlserver四舍五入使用round函数及cast和convert函数
- 常用算法之(插入排序)
- IEngineEditor与IWorkspaceEdit,以及相关的事件监听
- 分析oracle索引空间使用情况,以及索引是否须要重建
- JAVA利用enum结合testng做数据驱动示例
- android中c文件log做宏打印
- Mina工作原理分析
- 泛型
- Android关于OOM的解决方案
- RHCS集群安装部署
- iOS开发中tableView的分割线的处理问题
- 机器学习笔记_02单变量线性回归
- gevent