使用SVN、Git生成和应用patch的命令
SVN和Git两种版本控制系统生成和应用patch的区别。
一、SVN:
1、在指定版本间生成patch:
svn diff -r 421:438 > r421_438.patch //是r421以后当前目录的所有修改,不包括r421修改
diff -r 421:422 是r422的当前目录的所有修改。
diff -c 422 跟上一行一样,表示r422的changes。
2、svn应用patch:
p1:数字1表示文件深度,即目录,需要根据patch文件中修改路径+当前所在目录确定的.
例如:项目TestAndroid的源码目录:..../TestAndroid/test/media/...
test.patch文件中路径:--- a/media/....
其中a不是有效路径,下述为根据当前所在目录不同,对应的命令参数
当当前所在目录为test/时,patch -p1 ......
当当前所在目录为media/时,patch -p0 ......
二、Git:
1、生成patch
(1)两个commit间的修改(包含两个commit)【此时-o 后面是生成patch文件夹名,此时所有patch均在该目录下】
git format-patch <r1>..<r2>
如:
git format-patch d77aaac74845435744c49ae65511d9e1be79ed5c 046ee8f8423302f5070ca81b4e246516e919cd7a -o patchDir
(2)单个commit
git format-patch -1 <r1>
git format-patch -n <r1> 【从节点r1向前的n个节点的提交(包括r1)】
(3)从某commit以来的修改(不包含该commit)【记住:此时并非生成一个patch文件;而是每个提交都会生成一个patch文件】
git format-patch <r1>
2、检查及应用patch
(1)把生成的patch文件拷贝到目标git目录下
(2)检查patch文件
git apply --stat 0001-minor-fix.patch
(3)查看是否能应用成功
git apply --check 0001-minor-fix.patch
(4)应用patch
git apply 0001-minor-fix.patch 【仅应用,并未提交;查看状态显示为 M】
(5)另一方法:【应用并提交,不建议使用】
git am -s < 0001-minor-fix.patch 【使用-s在提交记录中会出现Signed-off-by信息,签名信息】
或 git am < 0001-minor-fix.patch 【根据具体情况而定】
3、原文参考:http://www.linuxidc.com/Linux/2014-09/106323.htm
4、关于git中patch的一点思考:
(1)在本地Git Bash中自测,git patch 针对某个目录或文件的使用?
上述情况不合理,patch不可能去针对某个目录或文件;因为:修改一个bug时可能会涉及多个文件,这样生成patch是按照某次提交来生成的,这样才有意义,才是完成的。
若仅针对某个文件生成patch,这很有可能不是一次完整的提交,也没实际意义!
posted on 2019-08-01 17:14 Android之路 阅读(2927) 评论(0) 编辑 收藏 举报