開源項目更新到個人倉庫二次開發并保持同步

當你克隆了一個開源項目并將其推送到自己的倉庫后,定期更新該開源項目并與你的本地修改同步是一個常見的需求。為了高效地管理這一過程,你可以使用 Gitupstream 遠程倉庫和 rebase 技術來保持代碼的整潔和線性歷史。

1. 設置上游遠程倉庫

首先,你需要將原始的開源項目倉庫設置為 upstream 遠程倉庫。這樣,你可以輕松地從上游獲取最新的更改,并將其合并到你的本地分支中。

假設你已經克隆了開源項目的倉庫,并將其推送到自己的 GitHub 或其他托管平臺上的倉庫。你可以通過以下命令添加 upstream

# 添加 upstream 遠程倉庫
git remote add upstream https://github.com/original-owner/original-repo.git# 查看所有遠程倉庫
git remote -v

你應該會看到類似如下的輸出:

origin    https://github.com/your-username/your-repo.git (fetch)
origin    https://github.com/your-username/your-repo.git (push)
upstream  https://github.com/original-owner/original-repo.git (fetch)
upstream  https://github.com/original-owner/original-repo.git (push)

2. 保持本地主分支與上游同步

為了確保你的本地主分支(通常是 mainmaster)始終與上游的最新版本保持同步,你可以定期從 upstream 拉取最新的更改。這里有兩種常見的方式:mergerebase

2.1. 使用 git pull --rebase 同步

git pull --rebase 是一種推薦的方式,因為它可以保持提交歷史的線性,避免不必要的合并提交。具體步驟如下:

# 切換到本地主分支
git checkout main# 從 upstream/main 拉取最新更改并 rebase
git pull --rebase upstream/main# 如果有沖突,解決沖突后繼續 rebase
git rebase --continue# 將更新后的本地主分支推送到你的遠程倉庫
git push origin main
2.2. 使用 git merge 同步

如果你更喜歡保留合并提交的歷史記錄,可以使用 git merge 來同步上游的更改:

# 切換到本地主分支
git checkout main# 從 upstream/main 拉取最新更改并合并
git pull upstream/main# 將更新后的本地主分支推送到你的遠程倉庫
git push origin main

3. 在功能分支上進行修改

為了保持主分支的整潔,建議你在功能分支上進行所有的開發工作。這樣,你可以隨時從主分支拉取最新的更改,而不會影響你的開發進度。

3.1. 創建功能分支

每次開始新的開發任務時,創建一個新的功能分支:

# 從本地主分支創建功能分支
git checkout -b feature/new-feature
3.2. 定期同步主分支

在開發過程中,如果上游有新的更改,你可以定期將主分支的最新更改合并到你的功能分支中。為了保持提交歷史的線性,建議使用 rebase

# 切換到功能分支
git checkout feature/new-feature# 從本地主分支拉取最新更改并 rebase
git rebase main# 如果有沖突,解決沖突后繼續 rebase
git rebase --continue
3.3. 完成功能并推送

當你完成功能開發后,將功能分支合并到主分支,并推送到你的遠程倉庫:

# 切換到本地主分支
git checkout main# 從功能分支拉取最新更改并合并
git merge --no-ff feature/new-feature# 推送更新后的主分支
git push origin main# 刪除功能分支(可選)
git branch -d feature/new-feature

4. 處理沖突

在同步上游更改時,可能會遇到沖突。Git 會暫停 rebase 或合并操作,并提示你解決沖突。你可以按照以下步驟處理沖突:

  1. 解決沖突:打開沖突文件,手動解決沖突。你可以使用 git diff 查看沖突的具體內容。
  2. 標記沖突已解決:解決沖突后,使用 git add 將修改后的文件標記為已解決。
git add <conflicted-file>
  1. 繼續 rebase 或合并:解決所有沖突后,繼續 rebase 或合并操作。
    • 對于 rebase
git rebase --continue
- 對于 `merge`:
git merge --continue
  1. 如果有多個沖突:Git 會逐個提示你解決每個沖突,直到所有沖突都解決完畢。每解決一個沖突后,都需要運行相應的繼續命令。
  2. 放棄 rebase 或合并:如果你不想繼續 rebase 或合并,可以使用以下命令放棄并恢復到之前的狀態。
    • 對于 rebase
git rebase --abort
- 對于 `merge`:
git merge --abort

5. 定期清理不再需要的遠程分支

如果你經常從上游同步更改并推送自己的修改,可能會積累大量的遠程分支。你可以定期清理不再需要的遠程分支,以保持倉庫的整潔。

# 列出所有遠程分支
git branch -r# 刪除不再需要的遠程分支
git push origin --delete <branch-name>

6. 自動化同步流程

如果你頻繁更新開源項目并推送自己的修改,可以考慮編寫腳本或使用CI/CD工具來自動化同步流程。例如,你可以編寫一個簡單的 Bash 腳本來自動執行 pull --rebasepush 操作。

#!/bin/bash# 切換到主分支
git checkout main# 從 upstream/main 拉取最新更改并 rebase
git pull --rebase upstream/main# 推送更新后的主分支
git push origin main

7. 提交 Pull Request 回上游

如果你對開源項目做出了有價值的改進,可以考慮向原始項目提交 Pull Request(PR)。這不僅可以幫助項目社區,還可以提高你的貢獻度。提交 PR 的步驟如下:

  1. 確保你的修改符合項目的貢獻指南:大多數開源項目都有貢獻指南,說明如何提交代碼、編寫提交信息等。請仔細閱讀并遵守這些指南。
  2. 創建一個新的功能分支:確保你在功能分支上進行所有修改,而不是直接在主分支上。
  3. 提交 PR:將你的功能分支推送到你的遠程倉庫,然后在 GitHub 或其他平臺上創建一個 Pull Request,請求將你的更改合并到上游倉庫。
  4. 等待審查:項目維護者會審查你的 PR,并可能要求你進行進一步的修改。根據反饋進行調整,直到 PR 被接受。

8. 總結

通過以上步驟,你可以有效地管理和更新從開源項目克隆的倉庫,同時保持自己的修改。關鍵是:

  • 使用 upstream 遠程倉庫來跟蹤原始項目。
  • 定期從 upstream 拉取最新的更改,并使用 rebase 保持提交歷史的線性。
  • 在功能分支上進行所有開發工作,避免污染主分支。
  • 及時處理沖突,并保持倉庫的整潔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76639.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76639.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多輸入多輸出 | Matlab實現BO-GRU貝葉斯優化門控循環單元多輸入多輸出預測

多輸入多輸出 | Matlab實現BO-GRU貝葉斯優化門控循環單元多輸入多輸出預測 目錄 多輸入多輸出 | Matlab實現BO-GRU貝葉斯優化門控循環單元多輸入多輸出預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 Matlab實現BO-GRU貝葉斯優化門控循環單元多輸入多輸出預測&#…

MCP(模型上下文協議)入門指南:用Web開發的視角理解下一代AI引擎

引言&#xff1a;當Java Web遇到長期記憶 想象你正在開發一個在線法律咨詢平臺。用戶上傳一份300頁的合同后&#xff0c;連續提出了10個問題&#xff1a; 第3頁的違約條款具體內容是什么&#xff1f;請對比第15頁和第120頁的支付條件整份合同中最高的賠償金額是多少&#xff…

簡易Minecraft python

廢話多說 以下是一個基于Python和ModernGL的簡化版3D沙盒游戲框架。由于代碼長度限制&#xff0c;這里提供一個核心實現&#xff08;約500行&#xff09;&#xff0c;您可以通過添加更多功能和內容來擴展它&#xff1a; python import pygame import moderngl import numpy a…

element-ui自制樹形穿梭框

1、需求 由于業務特殊需求&#xff0c;想要element穿梭框功能&#xff0c;數據是二級樹形結構&#xff0c;選中左邊數據穿梭到右邊后&#xff0c;左邊數據不變。多次選中左邊相同數據進行穿梭操作&#xff0c;右邊數據會多次增加相同的數據。右邊數據穿梭回左邊時&#xff0c;…

WPS宏開發手冊——Excel實戰

目錄 系列文章5、Excel實戰使用for循環給10*10的表格填充行列之和使用for循環將10*10表格中的偶數值提取到另一個sheet頁使用for循環給寫一個99乘法表按市場成員名稱分類&#xff08;即市場成員A、B、C...&#xff09;&#xff0c;統計月內不同時間段表1和表2的乘積之和&#x…

計算機網絡-TCP的流量控制

內容來源&#xff1a;小林coding 本文是對小林coding的TPC流量控制的精簡總結 什么是流量控制 發送方不能無腦的發數據給接收方&#xff0c;要考慮接收方處理能力 如果一直無腦的發數據給對方&#xff0c;但對方處理不過來&#xff0c;那么就會導致觸發重發機制 從而導致網…

Spring Boot 七種事務傳播行為只有 REQUIRES_NEW 和 NESTED 支持部分回滾的分析

Spring Boot 七種事務傳播行為支持部分回滾的分析 支持部分回滾的傳播行為 REQUIRES_NEW&#xff1a;始終開啟新事務&#xff0c;獨立于外部事務&#xff0c;失敗時僅自身回滾。NESTED&#xff1a;在當前事務中創建保存點&#xff08;Savepoint&#xff09;&#xff0c;可局部…

突破反爬困境:SDK開發,瀏覽器模塊(七)

聲明 本文所討論的內容及技術均純屬學術交流與技術研究目的&#xff0c;旨在探討和總結互聯網數據流動、前后端技術架構及安全防御中的技術演進。文中提及的各類技術手段和策略均僅供技術人員在合法與合規的前提下進行研究、學習與防御測試之用。 作者不支持亦不鼓勵任何未經授…

C++數據排序( 附源碼 )

一.冒泡排序 原理:自左向右依次遍歷,若相鄰兩數順序錯誤,則交換兩數. 這樣,每一輪結束后,最大/最小的數就會到最后. Code: #include <iostream> #include <cstdio> using namespace std; const int N1e51; int n,a[N],in; void PrintArray(int a[],int n){for…

I2C 讀寫 AT24C02

根據AT24C02的 Datasheet 可知AT24C02有2K bit&#xff0c;即256B&#xff0c;分為32頁,每頁8個字節&#xff0c;結合數據手冊和原理圖可以得知&#xff0c;板載AT24C02的讀地址為0xA2&#xff0c;寫地址為0xA3&#xff1a; #define AT24C02_ADDR_WRITE 0xA2 #define AT24C02_…

K8S學習之基礎七十四:部署在線書店bookinfo

部署在線書店bookinfo 在線書店-bookinfo 該應用由四個單獨的微服務構成&#xff0c;這個應用模仿在線書店的一個分類&#xff0c;顯示一本書的信息&#xff0c;頁面上會顯示一本書的描述&#xff0c;書籍的細節&#xff08;ISBN、頁數等&#xff09;&#xff0c;以及關于這本…

Linux 查找文本中控制字符所在的行

參考資料 ASCIIコード表 目錄 一. 業務背景二. 遇到的問題三. 分析3.1 url編碼的前置知識3.2 出現控制字符的transactionid分析3.3 16進制分析 四. 從文本中查找控制字符所在的行五. 控制字符一覽 一. 業務背景 ?在項目中&#xff0c;業務請求對應著下URL http://www.test.…

python將pdf文件轉為圖片,如果pdf文件包含多頁,將轉化的多個圖片通過垂直或者水平合并成一張圖片

要將PDF文件轉換為圖片&#xff0c;并將多頁PDF垂直合并成一張圖片&#xff0c;可以使用PyMuPDF&#xff08;也稱為fitz&#xff09;庫來讀取PDF文件&#xff0c;并使用Pillow庫來處理和合并圖片。以下是一個示例代碼&#xff0c;展示了如何實現這個功能&#xff1a; 首先&…

HarmonyOS 基礎組件和基礎布局的介紹

1. HarmonyOS 基礎組件 1.1 Text 文本組件 Text(this.message)//文本內容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字體大小.maxLines(1)// 最大行數.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出顯示....fontColor(Color.Black).…

FrameWork基礎案例解析(四)

文章目錄 單獨拉取framework開機與開機動畫橫屏Android.mk語法單獨編譯SDKmake 忽略warning單獨修改和編譯Camera2單獨編譯Launcher3Android Studio 導入、修改、編譯Settings導入 Android Studio 導入、修改、編譯Launcher3android 開機默認進入指定Launcher植入自己的apk到系…

基于vscode(GDB)調試ros2節點

一、環境準備 必備vscode插件 1&#xff09;Docker Docker - Visual Studio Marketplace 2&#xff09;Dev Containers Dev Containers - Visual Studio Marketplace 3&#xff09;GDB GDB Debug - Visual Studio Marketplace 二、進去docker鏡像 1&#xff09;docker安…

基于springboot的考研成績查詢系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 這些年隨著Internet的迅速發展&#xff0c;我們國家和世界都已經進入了互聯網大數據時代&#xff0c;計算機網絡已經成為了整個社會以及經濟發展的巨大動能&#xff0c;考研成績查詢管理事務現在已經成為社會關注的重要內容&#xff0c;因此運用互聯網技術來提高考研成績…

C++:算術運算符

程序員Amin &#x1f648;作者簡介&#xff1a;練習時長兩年半&#xff0c;全棧up主 &#x1f649;個人主頁&#xff1a;程序員Amin &#x1f64a; P? ?S : 點贊是免費的&#xff0c;卻可以讓寫博客的作者開心好久好久&#x1f60e; &#x1f4da;系列專欄&#xff1a;Java全…

PyQt6實例_A股日數據維護工具_使用

目錄 前置&#xff1a; 下載預備更新的數據 使用工具更新 用工具下載未復權、前復權、權息數據 在PostgreSQL添加兩個數據表 工具&視頻 前置&#xff1a; 1 本系列將以 “PyQt6實例_A股日數據維護工具” 開頭放置在“PyQt6實例”專欄 2 日數據可在“數據庫”專欄&…

REST 方法

FUNCTION ZFM_INTERFACE_LOG. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" REFERENCE(IV_DSTART) TYPE EDI_UPDDAT *"---------------------------------------…