前言

近期使用github给baidu/brcc提交pr,然后发现提完pr以后我如果再次修改并且baidu/brcc有其他人的更新,我的fork仓库无法同步,所以找了一些最佳实践,在此进行总结。

实现方案

一般情况下,这种情况有两种做法:

  • 将fork的仓库在你的github上删除掉,然后重新fork
  • 通过git命令将原代码进行同步到你的代码中

实际上在github的操作中都是merge 与 merge的操作,在你只需要和原代码保持一致的情况下,可以采用第二种方案进行同步

实践步骤

通过git命令将原代码同步到我fork的代码仓库中,使用merge的方法来进行操作。下面是具体的操作命令,以brcc仓库为例.
  • 1、进入到我的本地仓库中:
    1
    cd ~/github-me/brcc/
  • 2、执行命令 git remote -v 查看远程仓库的地址
    初始情况下,执行完命令只会存在如下两条记录
    1
    2
    3
    ➜  brcc git:(main) git remote -v 
    origin git@github.com:dislazy/brcc.git (fetch)
    origin git@github.com:dislazy/brcc.git (push)
  • 3、执行命令 git remote add upstream git@github.com:baidu/brcc.git 给当前仓库添加 上游仓库(upstream)
    添加完上游仓库之后再次执行git remote -v,就可以看到当前的代码仓库出现了四条记录
    1
    2
    3
    4
    5
    ➜  brcc git:(main) git remote -v 
    origin git@github.com:dislazy/brcc.git (fetch)
    origin git@github.com:dislazy/brcc.git (push)
    upstream git@github.com:baidu/brcc.git (fetch)
    upstream git@github.com:baidu/brcc.git (push)
  • 4、执行命令 git status 查看自己存不存在当前分支下已修改未提交的,如果有的话可以提交到你的当前分支去(前提是你的代码不是主分支)
    1
    2
    3
    4
    5
    ➜  brcc git:(main) git status
    On branch main
    Your branch is up to date with 'origin/main'.

    nothing to commit, working tree clean
  • 5、执行命令 git fetch upstream 抓取 baidu/brcc 原仓库的更新
    1
    2
    3
    4
    5
    6
    7
    8
    ➜  brcc git:(main) git fetch upstream 
    remote: Enumerating objects: 136, done.
    remote: Counting objects: 100% (110/110), done.
    remote: Compressing objects: 100% (45/45), done.
    remote: Total 82 (delta 32), reused 63 (delta 14), pack-reused 0
    Unpacking objects: 100% (82/82), 7.48 KiB | 134.00 KiB/s, done.
    From github.com:baidu/brcc
    * [new branch] main -> upstream/main
  • 6、如果你的代码不是主分支,那么执行命令 git checkout main 切换到代码主分支
    1
    2
    3
    ➜  brcc git:(main) git checkout main
    Already on 'main'
    Your branch is up to date with 'origin/main'.
  • 7、最关键命令 git merge upstream/main,将原代码的主分支代码merge到你的fork仓库主分支上
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ➜  brcc git:(main) git merge upstream/main 
    Updating f8099cb..a5d4533
    Fast-forward
    .codecov.yml | 6 +-
    README.md | 178 ++++++++++++++++++++++++++++----------------------------
    brcc-cache/src/test/java/com/baidu/brcc/SampleTest.java | 41 -------------
    brcc-example/src/test/java/com/baidu/brcc/example/ApplicationTest.java | 31 ----------
    brcc-sdk-starter/pom.xml | 2 +-
    brcc-sdk/pom.xml | 2 +-
    brcc-sdk/src/test/java/com/baidu/brcc/ConfigChangedListenerTest.java | 2 +-
    brcc-sdk/src/test/java/com/baidu/brcc/spring/ConfigCenterPropertyPlaceholderConfigurerTest.java | 2 +-
    brcc-server/src/test/java/com/baidu/brcc/RccApplicationTest.java | 30 ----------
    doc/java-sdk-guide.md | 11 +++-
    10 files changed, 106 insertions(+), 199 deletions(-)
    delete mode 100644 brcc-cache/src/test/java/com/baidu/brcc/SampleTest.java
    delete mode 100644 brcc-example/src/test/java/com/baidu/brcc/example/ApplicationTest.java
    delete mode 100644 brcc-server/src/test/java/com/baidu/brcc/RccApplicationTest.java

  • 8、经过上面一步,已经将对应的原仓库代码同步到你的fork仓库中了,此时执行git push即可完成操作
    1
    2
    3
    4
    ➜  brcc git:(main) git push 
    Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
    To github.com:dislazy/brcc.git
    f8099cb..a5d4533 main -> main
    经过以上8个步骤,已经成功的将fork仓库的代码和原代码保持一致了,如果需要再次提pr,后期按照此步骤操作即可。