一、目标
Unidbg的作者最近更新挺频繁,我们得跟上大佬的脚步,这样才不会被落下。
二、分析
代码对比
先把最新的代码拉回来
git pull
然后和我们之前的代码对比下,看上去改动挺多。我手工合并了3-5个文件,吐了一口老血…… 卒
git
作为一个有证的高级程序员,居然还用手工合并代码,差点都被李老板怀疑我的高程证书是中关村办的了。
我们之前fork的版本在
https://github.com/fenfei331/unidbg
现在我们的目标是要把 https://github.com/zhkl0228/unidbg 里面最新的更新合并过来。
首先
fenfeiMac:unidbg fenfei$ git remote -v // 查看远程状态
origin https://github.com/fenfei331/unidbg.git (fetch)
origin https://github.com/fenfei331/unidbg.git (push)
然后 加入要同步的 远程仓库
git remote add upstream https://github.com/zhkl0228/unidbg
再查看一下状态
fenfeiMac:unidbg fenfei$ git remote -v
origin https://github.com/fenfei331/unidbg.git (fetch)
origin https://github.com/fenfei331/unidbg.git (push)
upstream https://github.com/zhkl0228/unidbg (fetch)
upstream https://github.com/zhkl0228/unidbg (push)
没问题,添加成功
那就开始合并吧
先将远程所有的分支fetch下来,存在本地
fenfeiMac:unidbg fenfei$ git fetch upstream
remote: Enumerating objects: 6513, done.
remote: Counting objects: 100% (1205/1205), done.
remote: Compressing objects: 100% (269/269), done.
remote: Total 6513 (delta 870), reused 1123 (delta 814), pack-reused 5308
Receiving objects: 100% (6513/6513), 30.48 MiB | 6.00 MiB/s, done.
Resolving deltas: 100% (2852/2852), completed with 206 local objects.
From https://github.com/zhkl0228/unidbg
* [new branch] master -> upstream/master
* [new tag] v0.9.2 -> v0.9.2
* [new tag] v0.9.3 -> v0.9.3
然后正式开始合并
git merge upstream/master
出来个类 vi的界面,需要我们填 日志,
按 I 键,然后 输入 update 然后 esc → shift+: → wq 保存退出
fenfeiMac:unidbg fenfei$ git merge upstream/master
Removing unidbg-dynarmic/src/test/java/com/github/unidbg/arm/backend/dynarmic/DynarmicTest.java
Removing unidbg-dynarmic/src/test/java/com/github/unidbg/arm/backend/DynarmicBackendTest.java
Removing unidbg-dynarmic/src/main/java/com/github/unidbg/arm/backend/dynarmic/DynarmicLoader.java
Removing unidbg-api/src/main/java/com/github/unidbg/arm/backend/dynarmic/EventMemHookNotifier.java
Auto-merging unidbg-android/src/main/java/com/github/unidbg/linux/android/dvm/DalvikVM.java
Auto-merging unidbg-android/src/main/java/com/github/unidbg/linux/android/dvm/AbstractJni.java
Merge made by the 'recursive' strategy.
.gitignore | 4 +-
README.md | 14 +-
backend/dynarmic/README.md | 3 +
{unidbg-dynarmic => backend/dynarmic}/pom.xml | 7 +-
.../com/github/unidbg/arm/backend/DynarmicBackend.java | 138 +--
.../com/github/unidbg/arm/backend/DynarmicFactory.java | 29 +
.../com/github/unidbg/arm/backend/dynarmic/Dynarmic.java | 21 +-
.../unidbg/arm/backend/dynarmic/DynarmicBackend32.java | 2 +-
.../unidbg/arm/backend/dynarmic/DynarmicBackend64.java | 2 +-
......
好像,真的比较顺利耶,这就合并了?
跑一下试试
我就知道不会这么顺利,
创建Emulator的函数变了
private static AndroidEmulator createARMEmulator() {
return AndroidEmulatorBuilder
.for32Bit()
.build();
// return new AndroidARMEmulator("test");
}
再跑一下
st=1606701201628&sign=59039230dc2e1ea27a4f250d9ec81b8c&sv=111
destroy
run
这个值很眼熟哦。
最后更新到我们的GitHub的fork上,直接 git push origin master 就好了。
三、总结
git比svn的功能还是要复杂一些些,熟练使用版本控制工具,才能避免体力劳动。
你要心甘情愿地接受失败,你要想出很多办法,然后非常努力地工作,结果却发现这些办法都不管用。接下来你还要反复这样做,直到找到一个管用的方法为止
关注微信公众号,最新技术干货实时推送