一、目标

一、目标

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的功能还是要复杂一些些,熟练使用版本控制工具,才能避免体力劳动。

ffshow
1:ffsay

你要心甘情愿地接受失败,你要想出很多办法,然后非常努力地工作,结果却发现这些办法都不管用。接下来你还要反复这样做,直到找到一个管用的方法为止

100

关注微信公众号,最新技术干货实时推送

100