svn 及 git patch 文件

svn 及 git patch 文件

项目开发中经常会遇到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 恢复之前的修改。

推荐阅读