這是一個在開源協作中非常常見的配置。
簡單來說,upstream
在這里指的是你 Fork 來的那個原始的、官方的倉庫。
下面我們來詳細解釋一下這個 git remote -v
輸出的含義:
1. 兩條“遙控器” (Remotes)
你的 git
配置了兩個遠程倉庫的地址,就像電視有兩個遙控器,一個控制你的電視,一個控制你鄰居(官方項目)的電視。
-
origin
: 這是你自己的倉庫。https://github.com/Tipriest/ocs2.git
- 這通常是你從 GitHub 上 Fork (分叉) 過來的項目,它屬于你自己的賬號 (
Tipriest
)。 - 你對這個倉庫有完全的讀寫權限。你開發的新功能、修復的 bug,都會
push
(推送)到這里。
-
upstream
: 這是項目的“上游”,即原始官方倉庫。git@github.com:leggedrobotics/ocs2.git
- 這是
ocs2
這個項目的官方維護地址,屬于leggedrobotics
這個組織。 - 你通常只有只讀權限。你的主要操作是從這里
fetch
(拉取) 最新的官方更新,以保持你的 Fork 和官方版本同步。
2. 這個工作流有什么用?(The Fork & Pull Request Workflow)
這種 origin
+ upstream
的配置是開源社區最標準的協作流程,通常按以下步驟進行:
-
Fork: 你在 GitHub 上看中了
leggedrobotics/ocs2
這個項目,于是點擊 “Fork” 按鈕,在你的賬號下創建了一個副本Tipriest/ocs2
。 -
Clone: 你把你自己的副本克隆到本地電腦:
git clone https://github.com/Tipriest/ocs2.git
這時,
git remote -v
只會顯示origin
。 -
Add Upstream: 為了能方便地獲取官方倉庫的最新更新,你手動添加了
upstream
這個遠程地址:git remote add upstream git@github.com:leggedrobotics/ocs2.git
執行完這步,你的
git remote -v
就和你提供的一樣了。 -
同步更新: 當官方倉庫 (
upstream
) 有了新的提交,而你的 Fork (origin
) 落后了,你可以這樣做來同步:# 1. 從官方倉庫拉取最新的代碼和分支信息 git fetch upstream# 2. 切換到你的主分支 (可能是 main 或 master) git checkout main# 3. 將官方倉庫的更新合并到你的本地主分支 git merge upstream/main# 4. 將同步后的主分支推送到你自己的 GitHub 倉庫 git push origin main
-
貢獻代碼:
- 你在一個新分支上進行開發 (
git checkout -b my-new-feature
)。 - 開發完成后,你將這個新分支推送到你自己的倉庫 (
git push origin my-new-feature
)。 - 最后,你在 GitHub 上創建一個 Pull Request (PR),請求
leggedrobotics/ocs2
的維護者將你的my-new-feature
分支合并到他們的主分支中。
- 你在一個新分支上進行開發 (
總結
名稱 | 指向 | 你的權限 | 主要用途 |
---|---|---|---|
origin | 你自己的 Fork 倉庫 (Tipriest/ocs2 ) | 讀/寫 | 推送 (push ) 你的個人修改和新功能。 |
upstream | 原始的官方倉庫 (leggedrobotics/ocs2 ) | 只讀 | 拉取 (fetch /pull ) 官方的最新更新,保持同步。 |
所以,upstream
是一個約定俗成的名字,代表了代碼的“上游”源頭,讓你的本地倉庫能同時與“自己的遠程倉庫”和“官方的遠程倉庫”進行交互。