工作需要从SVN迁移到Git上来,之前已经无数次听说Git的强大了,但不深入了解学习,别人眼中的无比强大在我看来只能是雾里看花,抓不到精髓,所以从今天开始认真的学习分析下git的使用,分享点自己学习过程中的小心得。
先来看看Linus特别推崇的diff和patch。这两个工具并不是Git中独有的,甚至远远早于Git。
1、用diff命令比较两个文件或目录的差异
现在有两个文件 test1.java test2.java,执行命令:
diff -u test1.java test2.java > diff.txt
上面执行的diff命令中的-u参数很重要,使得差异输出中带有上下文。diff.txt中即保存有test1.txt和test2.txt的差异比较结果。
2、patch相当于diff的反向操作
有了test1.java和diff.txt文件,则当test2.java进行过一定修改甚至删除时,想恢复test2.txt,则可用下面的命令来还原test2.java:
patch test2.java < diff.txt
当test1.java进行过修改或者删除后,想恢复时,可以:
patch -R test1.java < diff.txt
命令diff和patch还可以对目录进行比较操作。但是diff是行比较的,及时改正了一个字,也显示为一整行的修改。Git对diff进行了扩展,提供了一种在一行内逐词比较的差异比较方法,同时原生的diff不能对二进制文件进行处理,Git也扩展支持了此功能。