1. Github代碼fork之后,如何與原倉庫進(jìn)行同步?

        共 4963字,需瀏覽 10分鐘

         ·

        2021-06-03 05:04

        前言

        我們?cè)谑褂肎itHub時(shí),看到好的項(xiàng)目或想給某個(gè)項(xiàng)目做貢獻(xiàn),此時(shí)通常會(huì)將代碼倉庫fork到自己的賬號(hào)下。如果在此期間,如果源倉庫的代碼發(fā)生了變動(dòng),就需要與源倉庫代碼進(jìn)行同步。本篇文章就帶大家實(shí)操一下,如何實(shí)現(xiàn)這一操作。

        配置項(xiàng)目的上游倉庫

        首先需要大家將fork的倉庫代碼clone到本地,后面的所有操作都是基于本地代碼庫來進(jìn)行操作的。比如,可以通過git clone先將fork的代碼下載到本地:

        git clone [email protected]:secbr/nacos.git

        后續(xù)的一步步操作,都是基于本地倉庫來進(jìn)行操作。

        進(jìn)入到本地倉庫目錄

        通過cd操作,進(jìn)入到clone下來的本地倉庫根目錄:

        cd /Users/apple/develop/nacos-request/nacos

        后續(xù)的操作無特殊說明,都是在這個(gè)本地倉庫的目錄下進(jìn)行操作。

        查看遠(yuǎn)程倉庫路徑

        執(zhí)行命令 git remote -v 查看遠(yuǎn)程倉庫的路徑:

        appledeMacBook-Pro-2:nacos apple$ git remote -v
        origin https://github.com/secbr/nacos.git (fetch)
        origin https://github.com/secbr/nacos.git (push)

        如果只顯示2行內(nèi)容,說明該項(xiàng)目還未設(shè)置upstream(中文叫:上游代碼庫),一般情況下,設(shè)置好一次upstream后就無需重復(fù)設(shè)置。通過顯示遠(yuǎn)程倉庫的路徑和clone時(shí)的路徑對(duì)照,會(huì)發(fā)現(xiàn),此時(shí)遠(yuǎn)程倉庫的路徑還是fork項(xiàng)目的路徑。

        添加upstream路徑

        執(zhí)行命令 git remote add upstream https://xxx.git,把fork的源倉庫設(shè)置為 upstream 。這里項(xiàng)目是從alibaba的nacos倉庫fork過來的,因此對(duì)應(yīng)的upstream就是alibaba的源倉庫地址。

        執(zhí)行上述命令,在此執(zhí)行g(shù)it remote -v 檢查是否成功。

        appledeMacBook-Pro-2:nacos apple$ git remote add upstream https://github.com/alibaba/nacos.git
        appledeMacBook-Pro-2:nacos apple$ git remote -v
        origin https://github.com/secbr/nacos.git (fetch)
        origin https://github.com/secbr/nacos.git (push)
        upstream https://github.com/alibaba/nacos.git (fetch)
        upstream https://github.com/alibaba/nacos.git (push)

        通過上面的輸出可以看出,多了兩項(xiàng)upstream的地址,說明添加upstream成功。

        檢查本地代碼狀態(tài)

        由于我們的實(shí)例是直接從倉庫clone下來的,本地還沒有修改代碼。如果你的本地項(xiàng)目已經(jīng)修改了一些代碼,不確定是否提交了代碼,就需要執(zhí)行g(shù)it status來檢查一下。

        appledeMacBook-Pro-2:nacos apple$ git status
        On branch develop
        Your branch is up to date with 'origin/develop'.

        nothing to commit, working tree clean

        上面顯示,本地沒有需要提交的(commit)的代碼。如果本地有修改,需要先從本地倉庫推送到GitHub倉庫。然后,再執(zhí)行一次 git status 檢查。

        對(duì)應(yīng)推送到GitHub倉庫的基本操作步驟如下:

        git add -A 或者 git add filename
        git commit -m "your note"
        git push origin master
        git status

        完成上面的基本操作之后,確認(rèn)代碼都已經(jīng)提交,便可以開始執(zhí)行源倉庫與本地倉庫的merge操作了。

        抓取源倉庫的更新

        經(jīng)過上面步驟的準(zhǔn)備之后,我們可以進(jìn)行源倉庫的代碼更新了。執(zhí)行命令 git fetch upstream 抓取原倉庫的更新:

        appledeMacBook-Pro-2:nacos apple$ git fetch upstream
        remote: Enumerating objects: 2646, done.
        remote: Counting objects: 100% (2593/2593), done.
        remote: Compressing objects: 100% (1157/1157), done.
        remote: Total 2646 (delta 731), reused 2404 (delta 682), pack-reused 53
        Receiving objects: 100% (2646/2646), 1.67 MiB | 1.47 MiB/s, done.
        Resolving deltas: 100% (734/734), completed with 37 local objects.
        From https://github.com/alibaba/nacos
        * [new branch] 0.2.1 -> upstream/0.2.1
        * [new branch] 0.2.2 -> upstream/0.2.2
        * [new branch] 0.3.0 -> upstream/0.3.0
        //...省略一部分

        執(zhí)行上述命令之后,上游倉庫的更新(commit)會(huì)本存儲(chǔ)為本地的分支,通常名稱為:upstream/BRANCHNAME。比如上面的upstream/0.3.0。

        切換分支

        完成了上游倉庫分支的拉取之后,先來核查一下本地倉庫當(dāng)前處于哪個(gè)分支,也就是需要更新合并的分支。比如,這里我需要將develop分支的內(nèi)容更新到與上游倉庫代碼一致。則先切換到develop分支:

        appledeMacBook-Pro-2:nacos apple$ git checkout develop
        Already on 'develop'
        Your branch is up to date with 'origin/develop'.

        上面提示已經(jīng)是develop分支了。

        執(zhí)行合并

        執(zhí)行命令 git merge upstream/develop 合并遠(yuǎn)程的develop分支。比如你合并的可能是master,可根據(jù)需要將develop的名稱替換成對(duì)應(yīng)的master。

        appledeMacBook-Pro-2:nacos apple$ git merge upstream/develop
        Removing test/src/test/java/com/alibaba/nacos/test/naming/DeregisterInstance_ITCase.java
        // ...省略一部分
        Removing naming/src/test/java/com/alibaba/nacos/naming/core/PushServiceTest.java
        Auto-merging client/src/main/java/com/alibaba/nacos/client/naming/remote/http/NamingHttpClientProxy.java
        CONFLICT (content): Merge conflict in client/src/main/java/com/alibaba/nacos/client/naming/remote/http/NamingHttpClientProxy.java
        Removing client/src/main/java/com/alibaba/nacos/client/naming/core/HostReactor.java
        Removing .editorconfig
        Automatic merge failed; fix conflicts and then commit the result.

        執(zhí)行完上述命令之后,會(huì)發(fā)現(xiàn)上游代碼指定分支的修改內(nèi)容已經(jīng)反映到本地代碼了。

        上傳代碼到fork分支

        執(zhí)行完上一步的合并操作之后,往后還有一些后續(xù)處理,比如代碼沖突。如果本地修改了內(nèi)容,上游倉庫也修改了對(duì)應(yīng)的代碼,則可能會(huì)出現(xiàn)沖突。這時(shí)就需要對(duì)比代碼進(jìn)行修改。本人更習(xí)慣使用IDEA中可視化的插件進(jìn)行代碼沖突解決,你也可以選擇你喜歡的方式進(jìn)行解決。

        解決完沖突之后,就可以執(zhí)行正常的代碼add、commit和push操作了。這里的一系列操作都是針對(duì)自己fork的倉庫的,對(duì)應(yīng)操作實(shí)例如下:

        appledeMacBook-Pro-2:nacos apple$ git add .
        appledeMacBook-Pro-2:nacos apple$ git commit -m 'merge from nacos'
        [develop 8601c1791] merge from nacos
        appledeMacBook-Pro-2:nacos apple$ git push
        Enumerating objects: 4, done.
        Counting objects: 100% (4/4), done.
        Delta compression using up to 12 threads
        Compressing objects: 100% (2/2), done.
        Writing objects: 100% (2/2), 281 bytes | 281.00 KiB/s, done.
        Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
        remote: Resolving deltas: 100% (1/1), completed with 1 local object.
        To https://github.com/secbr/nacos.git
        76a4dcbb1..8601c1791 develop -> develop

        上述操作,通過add、commit、push一系列操作,將源倉庫中的修改內(nèi)容,提交到自己fork的分支當(dāng)中了。此時(shí)再查看自己fork的GitHub倉庫,發(fā)現(xiàn)代碼已經(jīng)更新。

        小結(jié)

        本篇文章介紹了當(dāng)我們fork一個(gè)倉庫代碼之后,如何將上游倉庫最新的代碼與自己倉庫進(jìn)行同步更新。如果你喜歡fork一些優(yōu)秀的代碼,需要在GitHub上為開源項(xiàng)目做貢獻(xiàn),那么這個(gè)基本的操作必須得了解一下。


        往期推薦



        @PostConstruct注解是Spring提供的?今天講點(diǎn)不一樣的

        再聊面試,這次關(guān)于錢,關(guān)于培訓(xùn),關(guān)于內(nèi)卷

        Spring的Lifecycle和SmartLifecycle,可以沒用過,但不能不知道!

        一個(gè)實(shí)例,輕松演示Spring Cloud集成Nacos實(shí)例

        篩選了幾百份簡歷,終于明白了為什么大廠要設(shè)學(xué)歷門檻了



        如果你覺得這篇文章不錯(cuò),那么,下篇通常會(huì)更好。添加微信好友,可備注“加群”(微信號(hào):zhuan2quan)。

        一篇文章就看透技術(shù)本質(zhì)的人,
          和花一輩子都看不清的人,
          注定是截然不同的搬磚生涯。
        ▲ 按關(guān)注”程序新視界“,洞察技術(shù)內(nèi)幕
        瀏覽 54
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 日本中文字幕无码 | 丝袜乱伦视频 | 日韩中文视频 | 国产精品久久久久久最猛 | 小泽玛利亚一区二区三区 |