由于我在最近的项目中修改的文件很多,所以在上线前会审查一下自己的代码,和之前的版本diff一下。经过自己的实践,掌握了一点点技巧,给大家分享一下,欢迎吐槽交流。本文将会涉及git命令行工具,Araxis Merge,Github网页diff, SourceTree等工具的diff方法。
�1 .git 命令行工具
当diff的文件只是一个或几个文件时,使用命令行手动diff,直接在命令行敲命令比较方便
- 查看一个文件的commit历史
git log -- filepath
结果如下,会列出这个文件的最近的修改历史:
- 查看一个文件的commit历史和详细的修改内容
git log -p -- filepath
结果如下:
这个diff方法可以查看最近几次的简单的修改,如果只是查看最近一两次简单的修改�还ok,但如果一个文件首先加入了一些代码,然后这些代码又被多次修改,这是很常见的事情,我们想查看我们从一次提交到另外一次提交到底修改了什么,这个命令就显得不够用了,这时我们使用下一个命令。
- 查看一个文件的两次commit之间的修改
git diff commit1:filepath commit2:filepath
举例来说,首先我们直接用git log找到我们需要diff的两次提交的commit id,然后找到diff某个文件:
这个命令会直接将这两次提交之间的修改diff出来,十分方便。此外,你也可以直接查看这个版本以来这个文件被修改了什么内容:
直接使用分支名或者标签名来代替commit id是可以的,因为git中分支和标签仅仅是指向节点的指针,代表一个节点。
diff命令也可以直接对比两个结点之间的所有文件的修改,然而当修改的文件过多时,这个命令在命令行中感觉并不好用,因为显示的文件太多了,比较乱。
git diff commit1 commit2
查看历史修改内容我一直使用的是Github客户端,用了很久了,感觉拿它来查看文件的修改和提交历史还是挺不错的。下载这个工具请参考:https://desktop.github.com/
2 .Araxis Merge工具
Araxis Merge工具是我在项目对比中使用的最早的对比工具,这个工具可以对比两个文件或两个文件夹,显示的对比界面其实还是比较容易看的,但这个工具只能对比两个文件夹,所以diff之前,我首先需要先把我的项目文件夹copy一�份,然后把两个文件夹拖进Araxis Merge的窗口中,然后它会自动进行diff。我不太喜欢每次diff前copy,让我觉得很麻烦(还有个原因可能是我觉得它界面不fashion?显得比较笨),不过它的树形展示结构还不错,所以这里给出一个效果截图,有兴趣的同学自己下一个玩一玩。
3 .github网页diff工具
这个工具我只是在查找这些工具时发现的,主要是对github仓库中的代码进行diff,按照如下格式访问url即可。
http://github.com/<USER>/<REPO>/compare/[<START>...]<END>
结果是一个包含了提交历史记录和修改文件的列表的网页,效果图如下,我只能说相比之前的diff好看很多好嘛-_-||,然而公司的项目并不在github上:
想要了解github这个工具的更多详情,请参考
https://github.com/blog/612-introducing-github-compare-view
4 .SourceTree
SourceTree是我找到的最好用的diff工具吧,长相虽然不算好看,也不算丑吧。先看看它长什么样子:
这个软件我才用不久,两个diff方法我挺喜欢的:
-
查看单个文件的修改历史
在左下的框框中选中需要diff的文件,呼出菜单,第一个选项叫做查看选中的修改日志
,点击进入文件的修改详情列表
然后可以看到对这个文件的修改记录,看起来就像是diff命令行的图形化版本。 -
diff神技
在上一个界面,Mac按住command键,再选择一行,Oh I'm shocked。
直接显示出了这个文件的两次提交的diff,行数和修改都列的很清楚。感觉还不够方便? 回到提交历史界面,按住command键选择两次提交,直接显示出这两次提交的所有文件的diff,速度相当快。
使用第一方法可以直接review文件,第二种方法可以直接review整个项目,我觉得都是很方便的。SourceTree这个软件也是免费的,官网地址
https://www.sourcetreeapp.com/
欢迎讨论吐槽!