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也是一个仓库名
———————————————————————————————————————————