项目开发中经常会遇到A同事编写的代码需要B同事review,然后由C同事提交,patch文件是一种很好的代码传递方式。
1 svn patch文件操作:
1) 生成svn patch文件
svn status . #查看当前目录下修改过的文件列表
svn diff . > xxx.patch #由当前目录下修改过的文件差异,生成xxx.patch文件
svn diff file1 … fileN > xxx.patch #选取file1 ~ fileN的差异,生成xxx.patch文件
2) 应用patch文件
svn patch patchfile[patch] #可以通过svn patch –help 查看说明
3) 从提交记录中生成patch文件
svn log . –v –r revNo #查看revision revNo中修改的文件列表
svn log . –diff –r revNo > xxx.patch #查看diff信息,类似git log –p
4) 取消补丁
svn revert . –depth infinity (对当前目录修改的文件全部执行revert) 或svn revert file1 … fileN
对于用svn tortoise的童鞋可以用svn create patch及svn apply patch生成和应用patch文件,也很方便。
2 git patch 操作
1) 生成patch文件
git status .
git diff > xxx.patch 或 git diff file >xxx.patch #由差异生成patch文件
git diff –cache > xxx.patch #只生成stage的文件patch(即git add之后的,unstaged的不算)
2) 应用patch
git apply –check xxx.patch #查看能否patch成功,不应用patch
git app patch #应用patch
3) 从提交记录中生成patch文件
git format-patch –n 节点N [-mbranch] #n表示生成提交节点最近的n次提交,一般取n=1,可以生成当前提交节点的patch文件,[-m branch]表示与哪个分支比对
git am xxx.patch #合入patch并执行git commit
4) 取消补丁:
git reset –hard origin/master
另外,使用git 合入补丁时常常要同步下git库代码,这时可以用gitstash 将修改入栈,然后使用git pull更新代码,更新完后再使用git apply patch 合入补丁,合入后可以用git pop 恢复之前的修改。