1?? 倉庫分支(Repository Branch)
每個 Git 倉庫都有自己的分支結構。
分支決定你當前倉庫看到的代碼版本。
示例:倉庫分支只是局部修改,項目分支才是全局管理所有倉庫分支的概念。
wifi_camera 倉庫: - main - dev - feature_x
切換分支后,你看到的就是這個倉庫的對應版本。
1?? 本地分支(Local Branch)
存在于你本地倉庫的分支。
你可以在上面自由修改、提交(
git commit
)。只有你本地可見,除非推送到遠程倉庫。
2?? 遠程分支(Remote Branch)
存在于遠程倉庫(如
origin
)的分支。遠程分支通常以
remotes/origin/分支名
的形式顯示。不能直接修改,需要先拉取(
git fetch
/git pull
)到本地分支,再操作。
3?? 本地分支與遠程分支的關系
跟蹤關系(Tracking):本地分支可以設置跟蹤某個遠程分支。
例如,你本地的
release/AC792N_SDK_V3
可能跟蹤遠程的origin/release/AC792N_SDK_V3
。這樣你執行
git pull
就會拉取遠程分支的更新到本地分支。
推送關系:本地分支修改后,可以
git push
到遠程分支。同步:
git fetch
:更新遠程分支信息,但不改變本地分支。git pull
:先fetch
,再把遠程分支合并到本地分支。
🔹 舉個例子
遠程 origin:release/AC792N_SDK_V3feature/openvg本地:* release/AC792N_SDK_V3 (跟蹤 origin/release/AC792N_SDK_V3)dev_temp (未跟蹤遠程)
當你在本地
release/AC792N_SDK_V3
提交后,執行git push
會把修改同步到遠程的origin/release/AC792N_SDK_V3
。當遠程
origin/feature/openvg
有更新,你本地沒有這個分支時,需要先git checkout -b feature/openvg origin/feature/openvg
才能操作。
1?? wifi_sdk
倉庫
這是 頂層倉庫,也就是你
repo init
/repo sync
拉下來的根倉庫。它的內容通常包括整個項目的 整體結構,以及一些公共配置或頂層構建文件(比如
build/
)。在
wifi_sdk
倉庫下,你看到的release/AC792N_SDK_V3
分支就是屬于 這個倉庫 的分支。
2?? wifi_sdk/apps/common
倉庫
這是一個 子倉庫(sub-repo),通過
repo
管理工具納入到wifi_sdk
項目中。它只管理自己的一部分代碼(比如
common
相關的應用或模塊)。它有自己的分支和遠程倉庫,與頂層
wifi_sdk
倉庫相對獨立。你在
wifi_sdk/apps/common
下可以用git branch -a
查看它自己的分支,而不是頂層倉庫的分支。
3?? 總結區別
項目 | 類型 | 分支歸屬 | 內容 |
---|---|---|---|
wifi_sdk | 頂層倉庫 | release/AC792N_SDK_V3 | 整個項目結構,build腳本等 |
wifi_sdk/apps/common | 子倉庫(sub-repo) | 它自己的分支 | common模塊相關的代碼 |
頂層倉庫管理整體項目和子倉庫列表。
子倉庫只管理自己的一小部分代碼,它的分支獨立于頂層倉庫。
repo list
就是列出頂層倉庫下所有的子倉庫及路徑。
1?? repo list
作用:列出整個 項目下的所有 Git 倉庫。
范圍:整個項目,無論你當前在本地哪個子倉庫目錄下,都會顯示項目中定義的所有倉庫。
信息:每個倉庫的路徑、倉庫在遠程的目錄或來源(manifest 里定義的)。
例子:
wifi_sdk/apps/wifi_camera : wifisdk/wifi_camera/apps wifi_sdk/lib/media : department/firmware6/media
意思是項目里有 wifi_camera
倉庫、media
倉庫,它們分別對應這些路徑。
2?? git branch -a
作用:列出 當前 Git 倉庫 的所有分支。
范圍:僅限你當前所在的倉庫。
信息:
本地分支(
* release/AC792N_SDK_V3
表示當前分支)遠程分支(
remotes/origin/master
等)
🔹 總結對比
命令 | 范圍 | 顯示內容 | 用途 |
---|---|---|---|
repo list | 項目級 | 所有倉庫及路徑 | 查看項目里有哪些倉庫 |
git branch -a | 倉庫級 | 當前倉庫本地和遠程分支 | 查看當前倉庫有哪些分支 |
簡單理解:
repo list → 看“項目里都有誰”
git branch -a → 看“我自己這個倉庫里有哪些分支”
———————————————————————————————————————————
重定向:
remotes/m/wifi_video_master -> origin/wifi_video_master
這其實不是「兩個分支」同時存在,而是一個符號引用(symbolic-ref),你可以理解成 別名/快捷方式。
也就是說:
m/wifi_video_master
其實不是真的有分支,它只是一個「指針」,指向origin/wifi_video_master
。你看到的
->
就說明m/wifi_video_master
這個名字只是 重定向到origin/wifi_video_master
。所以你本地并沒有真正
m/wifi_video_master
的對象,它只是一個別名。
m是一個倉庫名,origin也是一個倉庫名
———————————————————————————————————————————