从网上得到一GIT binary patch文件, 却没办法把它恢复出来. google后发现可以用mercurial的hg工具还apply.

以下是在ubuntu下实际操作记录.

1) 先安装mercurial

sudo apt-get install mercurial

2) 用hg创建一个临时的代码库

hg init

3) vi .hg/hgrc 增加下面的内容,不然在后面的操作中会报"abort: no username supplied (see "hg help config")"的错误

[ui]
username = j <a.b.com>

4) 预先建一空文件, 否则会报"unable to find 'xxx' for patching"的错误

touch rt2860.bin
hg add rt2860.bin

5) 打补丁,得到想要的文件

hg import -f a.patch

通过分析hg的代码(python写的)发现"GIT binary patch"文件就是一经过base85编码的zip文件.

将其中的代码抽出来做一个小脚本, 就不需要上面那么麻烦了.

通过查阅网上资料,用python写了个小程序显示解码的过程.

附python2.4写的例程

# vim: set ts=8 sw=4 sts=4 et ai:
# Example base85 decoder, Walter Doekes 2012
import sys
import zlib
en85 = [
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z',
'!', '#', '$', '%', '&', '(', ')', '*', '+', '-',
';', '<', '=', '>', '?', '@', '^', '_', '`', '{',
'|', '}', '~'
]
def _chunk(data):
# TODO: remove white space
idx = 0
while len(data) > idx:
next = data[idx:idx+5]
idx += len(next)
padding = 5 - len(next)
if padding:
next = next.ljust(5, 'u')
#if next >= '|NsC1':
#    print >> sys.stderr, 'Garbage in input: %s' % (next,)
#    sys.exit(0)
yield next, padding
def _decode(chunk, padding):
assert len(chunk) == 5
num = 0
for c in chunk[:5] :
try :
num = num * 85
num += int(en85.index(c))
except ValueError:
print >> sys.stderr, 'Invalid base85 alphabet: "%c"' % (c)
sys.exit(0)
if num >= 2**32:
print >> sys.stderr, 'Garbage in input: %s' % (chunk)
sys.exit(0)
return ('%c%c%c%c' % (
chr(num >> 24),
chr((num >> 16) & 0xff),
chr((num >> 8) & 0xff),
chr(num & 0xff)
))[0:4-padding]
b85decode = (lambda x: ''.join(_decode(*i) for i in _chunk(x)))
def _b85decode(data):
dec = []
for line in data.split():
l = line[0]
if l <= 'Z' and l >= 'A':
l = ord(l) - ord('A') + 1
else:
l = ord(l) - ord('a') + 27
dec.append(b85decode(line[1:])[:l])
return ''.join(dec)
gitbp = (r'zcmeGh{cjY<^>%h|eg43{+uMWl*}$?r2V*d7z+juA#PMhNw83X=t0^oJQAq;o0=J<`'+'\n'
r'z<9KVZN-GjpHh(~BM{T1hvP7>^B--S(PEo2v>1k1<{t|V78=5u&uNpQXfPH<lcYrBv'+'\n'
r'z`dfdgPr8{m@4b2R=DnGDvu_alJ%oNK%eh<*F>9cN+PADwf11W=Cw($KlFsOvs5PZ@'+'\n'
r'zutKod<Q8M)Dw_;ACMRO)uPpL?m^2(y6R^9<<TxDvld6bnYy67ZC8~Y#6`D%=;&W<|'+'\n'
r'zs0QLl3k)$v?GQ5JrWV9*&*-KWn=zgseFs^UBYheNq~g&{Pua*=^>*LXCIO8YlE>O*'+'\n'
r'zY9Z{l3&9$L_YfV~S&wdWrWVeE0#MjfnM`IRb28&(@cIYpf0o97OXI(%@#ks$MH*jE'+'\n'
r'z;~Qx_lg5QP3D6DaGI%b7XEXS22H(lx+Zp^#2H*O(;`B_g(6dY#C?N@zizEzW4Jd;p'+'\n'
r'zqz4*3&=~xrw@3lF)8;(8Ramb+q@1bMVdZk0HDzkG*bG*K{;Qx~3UwXS%N)RAw-F#L'+'\n'
r'zUH+0bfDw>Op<V^`GN|hu%WqG~0{Xxkf>jt^Dh3}_D~Oj$09dZDyj1D|950mtAWPw5'+'\n'
r'zDa4c29cxtflEF-my(zHO#(P$q-H~-AcZJ*QcDk$GHCC&;+uh^#nOu~5my3bJt(X<H'+'\n'
r'zs^kx5KDc%}aBZ7f22kMI;;6<fo|do2bF*JG<N)<m;Nta*mt^q5$gS+SCM210ZPDc9'+'\n'
r'z_$>h3k<%x$$CGIMkUBFtIcfZ5=BBzlJ14L|z^R-7)r^y@Uh9rz8#MRibw@6Lm%A!I'+'\n'
r'zaHO6I6fDm_WKC;I@bLmF7SQFaE4y7L=L4<5Hu}#{);;6?+&%5S<9?=_QTvSkYrj0B'+'\n'
r'zvdfLzaxVQ?k_G7_>67|nCGz}MRQ7BdA(F;QK~@Q|Z9iq?k7qu<p$3L?0=l)#a6L<?'+'\n'
r'zES<dg)unukUwkc|`;9y;|7bY-)t_hepX^7>ACls|DakV?`{Qww^&KyXdfRNFSg^o?'+'\n'
r'z1r{u@V1We-ELdQ{0t*&cu)u-^7A){Tvj7U#qTqK?a0?3m4uyY@#A8T2J`EWGRJjes'+'\n'
r'zZlcIxB>qbA^U@+#U|v#qUMgpW>b0_b@AE%=!Ta{#OTYaE^i1%M60{!=j&BJ5q9K^t'+'\n'
r'z7<_9}sJJJzYj>!BPpH2))Sn2A_l2CjLYpQ$cT^ZV7JlM*_<#{UeKP#|DW5NV!H(Jo'+'\n'
r'z^o@1;`ci$vJF*ou84)LD9ohT*2PJ<?`ckNZ3@Dg4nMLqb3JC=?gr@dFssN}GVimUJ'+'\n'
r'zL7OyOI>)q>nM@gON6sW}=bX{KkY4cQ-PBkVzJOgt&a)MfK9yo<ejzcOd#_{>9W@o;'+'\n'
r'z^<9kKed-<>2^4)WpmI1R0gctWrL4Qs6B*Bqbv-O?D>Y0Fj(^|nrvh@xuA2T^7iTU~'+'\n'
r'z8M)-s`3B@N3KMupldYudV3E2M%7D5A%3?JHWr<n}WvS{XU8%AFm6ND&H$$U1KsKjX'+'\n'
r'zHtTjmql7jX+9(LOx%{MaRE_;mhH&4?Zc~dw&LITpgi5Ets6<#>1l}liSDI)Q2G&YE'+'\n'
r'zH?t35N9p3GRvH{xc{69C+8O6x=L(|dsJPkdx30PU|6x{CfdZF1^4du}kI@YJpqX_C'+'\n'
r'z+(9$Q;#93)A7G3v9;^V248?;t0L(!aiSleLGlK}HjsYrQgz~5o4>iu}13_3Tmn%(w'+'\n'
r'z0Jk&Ftm*gT#2p8g!S%!(Af2qc%k9=T=km!7x54zkkqkML$sGJypej}+tTWu+;^<p)'+'\n'
r'zZ})p{%9`4G$2gI9RVgf*q9Jx_FG3@9Vz2_n3x+fjd6q@MQcPKBI;*9?w9WPx#2NKj'+'\n'
r'zx4~5?{-(-ex8WW>Vpsatk#(sUcyXQ070|HpAh{uf<)_cFElcQr5Qw6dD{5(Swx-jC'+'\n'
r'zlvCF2CB3ke#iNS4;`~l!XLX)AM48KgIgn&2r-A&P7Du`}cBui<9qHCkWS0`#I=p`9'+'\n'
r'zotH}mw6TXbxnQ!z8QwUwUSOZ>DK>)~PJHdyJlS~ZTz!k8RMlHm6Vb7l6pNc&F;096'+'\n'
r'zxhW2}L$c_A&B|GKBPA-aB1&wRL2E^XiB`hOgH;v9-T!@sS)y!hw|0<rI9$X(`Xc>Y'+'\n'
r'zq&E=R5EMU^#91{`{<_Z>8617OZFF1f=#G7`F?g7GWYDN0PrncQqK#~$RV&#+E03-n'+'\n'
r'z=xwVoo*CWRHoCoabY~v76FO|oci5iqu=7C&g|sCq+JkPJ@fZxic{|U~x9#Kf)?(Od'+'\n'
r'ze9)sSK<Dl42C{c#-8$0xe!|I7Lbto$R%JUvy5g={8vjr&innOI6_JI?h!A<rida(?'+'\n'
r'z2gxc(20}_TQLb`!wGkk@I=W#kRofnRB0IJ;xy&K^VG{MEP75p5ezIR8rOMJ(fK(1D'+'\n'
r'z+6q8N@_sG`7yI=(zfq*ul^G~fXCJnY7!_o{a*ekr$k~UjBQO<KTcK>vqoUBARd$5H'+'\n'
r'z)O8wkF1pu`9xNhhm#&tQ%?A<89nKhzN}-2Lm>x2D0dU@Eo?Pj<BC=1y==>q+1qxk8'+'\n'
r'z=bx93Q0NLee^_7JB0a}V95OnTLp<r6xMFNkDywM+ZWxa8VIM5`O70Z^U-8}eVLWFn'+'\n'
r'zolombICJkh^T=bz$Bs!aa1+miyyqX1cllf7-KRY&PajK4N4SZ@o~uhVSvgFlUNx3@'+'\n'
r'zGxfk;(kW$Gg?JfM7}w*tKaVTlGVXoaqvIYO)9B%62G_tAV)67jrA3@LI(A}08+(zg'+'\n'
r'z4Tlp?x@)Zy_KRk49a-zpb*?qj(>XEckTzJVqFM%N_Odvug{>x|!frB3NvCoppXF^*'+'\n'
r'zy8KfsQDp@^xM@Y>3M~UFEMSN$EQ-G7NxSQi&7vxcYK^GY$M33J<KL)ayj<%com2<i'+'\n'
r'zVNVeUyt3JDhGCv446$_Dh*5A+q6rl5;a~BAFF7cEH|Qd6vYL(X18rze&I07TXp&c|'+'\n'
r'zOyxnHQtc&Amsw92NmN&e>T1xX19TBUmu>TPF;>~l#^!m#jrwoVq#1U>eXBG>qJF*('+'\n'
r'zg^1RbDh+z$f9{Z#iO)MaAhu@#;RU}A2!0*+g5TL5dr&@`um|9zYqX}wZc*JPsxQP5'+'\n'
r'z*faKtJ*f9FQmooU0qP}4<bTKH8gL3#PeQST7Q(P3RJM4h>X(kbn}J@WN8|NI+TRp>'+'\n'
r'zIKgTWk4J(tl*+jSY$(qLJQ*n#p=fxKL9vfat`Q%U>DV8c0+%dtAoN|0WKF*hf>{9m'+'\n'
r'zi~})km=RdT48ya77IVxnJUeJrP_KqshPoCf9JnY!L2-$XJRwU+gBB)RZkpjb6$0p&'+'\n'
r'z2HZLBIEGk2fnNXU*y0!v9Bw;QQ;xyyK_?&m;4p&o<V=gf>Sqi}f$JRQ5g<-*RJwPQ'+'\n'
r'z!|vmG_BCF(Wq=@EEh7yn*5jmoP)K6SDHVpM7dpV{jf~z0DgNC?G1$!yc5`==Mm1_N'+'\n'
r'zfU^drSozzHQ!PT(ZPJ)xk<EIitiqIgREvRoqDR~#s(VFsgXg!Zuk(5=pMPiclts=k'+'\n'
r'zL_x*VV9wF^Aia;hr#^Yyp*)}&^;U<z2lQeQ$Vz}as=oFNQV!DwmKnHJoFM~=sJaY1'+'\n'
r'zfWhK$0jq*~6?n)Gunh2O2W~Rpi}nh7Y4r*qfm2z}AB(}K$t#a|wXjIqft5z#G8hTo'+'\n'
r'za1>N*p&@4KDX@dWB8yr9-d*ama}ORS;Q6KULF>_1m``K~-LVsNg-PVF$<<=FX%Zf&'+'\n'
r'z+~%xXLz;ERcq8u15vReJBaP2CYyP`KwFdXHZ^$=OpS!VTPN;sfr-<I=;TBGspKVfu'+'\n'
r'z*_!5Dw!t_%;=%>6*|<P&8VtNN)siM>k~9Jog0}Ih#oJXfshK{<_f(#xx5ZSh$X}Cn'+'\n'
r'z<HlMTnqnLyPU5=5pGpR59Qt+?1d+2I?-7mn*ZAWGT%c+y-t#f#Gl^lfh)Sz#d5hGf'+'\n'
r'V>b&Do_AUGtEb#wkfmrY9e*#h>e{lc+')
decoded = _b85decode(gitbp)
fo = open("out.bin","wb")
fo.write(zlib.decompress(decoded))
fo.close()
print "done!"

不安装git工具应用GIT binary patch相关推荐

  1. git apply、git am打补丁.diff 和 .patch

    前提: 生成patch: git format-patch -M master 生成指定patch,0163bed3bf59ae74c36cc5138b4c24f1556d8304是commit id ...

  2. 使用Git工具上传项目代码到Gitee仓库

    [本文发布于https://blog.csdn.net/Stack_/article/details/128770678,未经许可禁止转载,转载须注明出处] 一.安装git工具 [git下载] [gi ...

  3. 持续集成与持续交付(一)—git工具使用、jenkins持续集成

    1.git工具使用 git官网 [root@server5 ~]# yum install git -y 安装git [root@server5 ~]# mkdir demo 创建初始目录 [root ...

  4. win10安装git工具及TortoiseGit

    下载 环境:windows操作系统: win10 64位 1. git客户端工具: TortoiseGit https://npm.taobao.org/mirrors/git-for-windows ...

  5. Git的具体使用,包括安装Git工具,把Git和IDEA结合,使用分支

    文章目录 Git的具体使用,包括安装Git工具,把Git和IDEA结合,使用分支 git安装及环境配置 git的必要配置 git config -l git config --system --lis ...

  6. 三种常见的 Mac 安装 git 工具的方法

    目录 前言 正文 一.佛系法 二.brew 法 三.终极大法 结尾 前言 有时候新 Mac 本子需要安装 git 工具,或者原来的 git 工具损坏了,再或者需要升级 git 版本,都需要涉及重新安装 ...

  7. windos10本地安装git工具并使用

    1.下载最新版本git 官网:https://gitforwindows.org/ https://github.com/git-for-windows/git/releases/download/v ...

  8. Android开发工具:Git,Github,GitBook

    从0开始学习GitHub系列 原文链接:http://blog.csdn.net/column/details/13170.html,原创发布于微信公众号 AndroidDeveloper「googd ...

  9. 开发工具:Git超全实用技巧,值得收藏!

    只有在遇到问题的时候,才体会到技巧带来的好处! 常见企业工作流程 主要介绍,企业中常用的 Git 工作流程! Git Flow 主干分支 稳定分支 开发分支 补丁分支 修改分支 Github Flow ...

最新文章

  1. CF1070L Odd Federalization 高斯消元
  2. Java实现string转byte
  3. C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持
  4. mysql语录错误1300_mysql 语句常见错误 汇总(持续更新中)
  5. 初学Python——字符串相关操作
  6. 唯一可译码判断c语言_单片机基础实验数码管原理与C语言
  7. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
  8. java时间选择,JAVA中的日期和时间选择器
  9. nodeJS之域名DNS
  10. Helm 3 完整教程(十七):Helm 流控制结构(1)if / else 语句
  11. [转载] 机器学习 - 如何使用 Java 调取 Python、R 的训练模型?
  12. 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(下)
  13. bzoj 4361: isn
  14. C#生成随机姓名 单姓 复姓
  15. 解决最新小马激活工具导致主页劫持问题
  16. 红孩儿编辑器的模块设计文档目录
  17. http请求中文字符加解密
  18. # 工欲善其事必先利其器-C语言拓展--嵌入式C语言(八)
  19. 动态规划解二维多重背包问题
  20. 【工具】复制别人的CSDN博客文章到本地

热门文章

  1. ORA-00911:无效的字符错误
  2. 竣达BMS-Pro电池巡检综合监控系统
  3. UML 顺序图(时序图)
  4. 重启linux服务器
  5. 已购买 Office 重新下载安装
  6. 财税服务云平台智慧财税NET商业源码
  7. Python基础知识 1
  8. c语言中使用了getch函数后如何自动按下任意键,C中的“按任意键继续”功能
  9. 《房思琪的初恋乐园》——向死而生的悲剧
  10. Android屏蔽home键爬坑