摘要
一次性讲透、直接能用的 git bundle create 完整用法,专门适配的场景:Jetson 板子 → 本地电脑 → GitLab,
整套固定流程:Jetson AGX 用 git bundle 打包 → 拷到本地 → 解包 → 推送到 GitLab
一、为什么要用 git bundle?
Jetson AGX 板子不能直接连 GitLab
板子也不能直接推送到云端
只能通过 文件拷贝 传到本地电脑
再从本地电脑推送到 GitLab
git bundle 就是干这个的:
把整个 Git 仓库打包成 1 个文件 → 拷贝到本地 → 本地解开 → 正常推送 GitLab
比直接拷文件夹干净、完整、不会丢提交记录。
二、完整流程
全程固定命令,以后重复用就行,不用改。
1、在 Jetson AGX 端操作(打包Git 仓库)
- 进入你的工程根目录(已经是 git 仓库的文件夹)
cd你的工程路径gitlog--oneline# 查看历史记录# 如果需要恢复到之前版本,就需要重置gitreset--soft号gitdiff--staged--name-only# 查看暂存区,是否为自己修改提交的部分- 执行打包(只打 master 分支完整历史)
gitbundle create my_code.bundle master# 打包gitbundle verify my_code.bundle# 查看是否打包成功执行完生成文件:my_code.bundle
这个文件包含:
所有提交记录
所有分支
所有代码
完整 Git 历史
和仓库一模一样。
- 把这个 my_code.bundle 拷贝到 Windows 本地任意文件夹
2 本地电脑解开 bundle(还原成 Git 仓库)
正确步骤顺序是这样:
a. 在本地创建 smf 分支(写代码、测试,如果无变动,可以不用修改)
b. 在 smf 分支上提交代码
c. 把 smf 推送到云端 GitLab
d. 在 GitLab 网页上把 smf 合并到 master
e. 合并完成后,删除本地 smf
f. 删除云端 smf
1.打开 Git Bash(右键选择git bash),进入目录:
cd/d/你的存放文件夹2. 解包还原成完整 git 仓库
到本地已有git工程目录下
- 从 master 新建分支
# 创建smf分支,切换到smf分支gitcheckout-bsmf# 解包gitpull my_code.bundle master你会得到一个完整的 Git 仓库:
D:\work\ai_perception\3. 进入还原后的仓库目录
cdai_perception4. 删掉 bundle 自带的旧远程,绑定你真实的 GitLab(可选项,只有在旧的远程仓库不是你要推送的,就需要删除)
gitremote-v## 由于不是我需要远程仓库,所以需要删除旧远程gitremote remove origin# 绑定你的GitLab仓库gitremoteaddorigin http://gitlab.xxxx.com/xxx/xxxx/xxx_perception.git5. smf分支下推送到云端
gitaddjeson_run.sh# 添加暂存区gitstatus# 查看状态,是否是自己修改以及需要提交的gitcommit-m'新增 jetson_run.sh脚步'gitpush origin smf打开 GitLab 网页,切到对应分支(比如这里是smf)就能看到代码
✅ 完成!
Jetson 上的所有代码 + Git 历史全部到 GitLab。
6. 去 GitLab 网页
把 smf 合并到 master
7. 合并完成后,切换回 master,删除本地smf分支,删除云端smf分支
删除smf分支gitbranch-a# 查看所有分支(本地+云端)gitcheckout master# 切换到mastergitlog--oneline# 查看历史记录gitbranch-a# 看有哪些分支,注意此时在master分支下,查看是否有其他分支gitbranch-Dsmf# 删除 本地smf 分支gitbranch# 查看是否删除smfgitpush origin--deletesmf# 删了云端smf = 开发分支(用来写代码、测试)
master = 主分支(永远稳定)
开发 → 推送 → 合并 → 删除旧分支
这就是 企业标准流程 ✅
8 分支拓展
1. 分支到底有什么用?(我在 Jetson 开发最需要)
在开发时:
master 放稳定代码
新建一个分支:dev_jetson
在这个分支上写板子代码、测试、改 bug
没问题了,再合并回 master
好处:永远不会把主代码搞崩!
2. 我之前用到分支的地方
创建 smf 分支提交代码
推送 git push origin smf
后来删掉它 git branch -D smf
这些全是 branch 功能。
👉删除 smf 分支前,用 smf 推送,然后在云端合并”!
1. 不在主分支 master 上直接改
2. 新开分支 smf 写代码
3. 推送 smf 到云端
4. 网页上合并到 master
这样 master 永远安全、稳定
3. 最常用的 3 条命令(背会就行)
gitbranch# 看有哪些分支gitbranch dev# 创建 dev 分支gitbranch-Ddev# 删除 dev 分支gitcheckout dev# (dev为分支名)下次更新代码重复操作极简版
- Jetson端侧 改完代码
- 把代码整个文件夹 拷到本地电脑 git 目录
gitbundle create my_code.bundle master拷到本地覆盖旧 bundle
3. 本地 GitBash 执行:
(打开到对应的git仓库工程目录,右键选择git bash)
gitadd.gitcommit-m"更新Jetson代码"gitpush origin master打开 GitLab 网页,切到对应分支(比如这里是smf)就能看到代码
Jetson 端
cd工程目录gitbundle create my_code.bundle master拷到本地覆盖旧 bundle
本地端
# 进到文件夹,重新解包、关联、推送gitclone my_code.bundle ai_perceptioncdai_perceptiongitremote remove origingitremote remove origin&&gitremoteaddorigin http://gitlab.xxxxx.com/xxx/xxx/xxx_perception.gitgitpush origin master关键好处
保留所有 git 提交历史,不是单纯拷文件
不用给 Jetson 配置 GitLab 账号、网络权限
全程离线打包,靠一个文件中转,最安全稳定