前期准备工作:
本实例用Android源码为例:
校验文件完整性
md5sum android-11.0-mid-rkr12.10.tar_a*
将多个文件重定向到新的压缩文件中(文件名自取)
cat android-11.0-mid-rkr12.10.tar_a* > rk3568_android.tar
解压文件 或解压到指定文件夹
tar -xvf rk3568_android.tar
检出项目
repo sync -l
建议上传 Android 系统源码前先编译源码,由于部分平台源码中含有下载更新提取等操作。
贸然删除所有 Git 或者 repo 会导致这部分操作异常编译失败,尤其是使用 repo 管理的系统源码。
先编译将此类文件操作完成之后再上传,并修复这类可能存在的操作。
源码中采用repo来管理,本实例采用单git管理。
一、创建 gitlab 仓库 (创建后会有如下提示,如果是比较小的项目可以直接使用)
Git 全局设置
git config --global user.name "name"
git config --global user.email "email"
创建一个新仓库
git clone git@192.168.30.233:xxxx.git
cd rk3568_android13
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
推送现有文件夹
cd existing_folder
git init
git remote add origin git@192.168.30.233:xxxx.git
git add .
git commit -m "Initial commit"
git push -u origin master
推送现有的 Git 仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin git@192.168.30.233:xxxx.git
git push -u origin --all
git push -u origin --tags
二、初始化本地Git仓库
进入源码根目录
cd /path/to/rk3568_android13
初始化Git仓库
git init
配置用户信息(已配置,可跳过)
git config user.email "email"
git config user.name "name"
1.1 检查是否已有Git仓库
ls -la | grep .git
检查是否有其他.git目录
find . -name ".git" -type d
1.2 删除原有的git记录
删除.repo目录(Repo工具管理目录)
rm -rf .repo/
删除所有子项目中的.git目录(重要!)
find . -name ".git" -type d ! -path "./.git" -exec rm -rf {} + 2>/dev/null
三、根目录下(如果没有)创建.gitignore文件
创建适当的.gitignore文件来忽略不必要的文件:(系统原有的忽律文件可能不完整,需要根据实际需要额外添加。)
.repo/
rockdev/
out/
.vscode
.local/
.idea/
.vscode/
*.iml
*/.project
.project
**/.settings/
*.prefs
*/.classpath
.classpath
# 以下仅供参考
!prebuilts/jdk/**/legal/java.prefs
!/external/rust/crates/bindgen/**/out/
!/external/rust/crates/clang-sys/**/out/
!/external/rust/crates/protobuf/**/out/
!/RKTools/linux/Linux_Pack_Firmware/rockdev/
cache.properties
gc.properties
executionHistory.lock
checkSums.lock
checksums.lock
fileHashes.lock
buildOutputCleanup.lock
last-build.bin
.gradle
四、添加远程仓库地址
添加GitLab远程仓库
git remote add origin git@192.168.30.233:xxxx.git
验证远程仓库
git remote -v
五、如果遇到大文件推送问题
由于Android源码较大,可能需要特殊处理:
# 配置Git大文件处理
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
git config --global http.postBuffer 2097152000
git config --global http.maxRequestBuffer 2097152000
如果推送失败,尝试分块推送
git push --progress origin master
或者使用浅层推送(如果历史记录不重要)
git push --depth 1 origin master
六、准备首次提交
添加所有文件到暂存区
git add .
检查将要提交的文件
git status
进行首次提交
git commit -m "初始提交: RK3568 Android 13.0系统源码
- 基于RK3568平台的Android 13.0源码
- 包含完整的系统构建环境
- 版本: android-13.0-mid-rkr6.1
- 提交时间: $(date)"
七、分阶段添加和提交(推荐)
由于Android源码很大,建议分阶段提交:
先添加小文件和非二进制文件
git add *.mk *.bp Android.mk Android.bp Makefile *.sh
git add build/ device/ hardware/ system/ frameworks/
提交第一次
git commit -m "初始提交: Android 13.0基础框架"
再添加其他目录
git add .
git commit -m "添加完整源码"
或者使用更细的提交策略
git add bionic/ bootable/ development/
git commit -m "添加系统组件"
git add external/ packages/ vendor/
git commit -m "添加外部包和供应商代码"
八推送到远程仓库
git remote add origin git@192.168.30.233:xxxx.git
git branch -M main
git push -u origin main
如果推送中断或失败,可以使用以下恢复策略:
方法1:继续推送(如果支持)
git push --progress
方法2:浅层推送(如果完整推送失败)
git push --depth 100 origin main # 先推送最近100个提交
方法3:分批推送
git push origin main:temp-branch # 推送到临时分支
可使用一下命令查看 git 状态:
ps aux | grep git
九、误提交的修补
如果文件已误提交:若 .classpath文件已经被意外提交到了 GitLab 仓库,
可以执行以下命令将其从版本控制中移除,但保留在本地,然后将 .classpath加入 .gitignore,再提交这次更改。
git rm --cached **/.classpath
移除所有 .settings 目录
git rm -r --cached **/.settings/
移除所有 .prefs 文件
git rm --cached **/*eclipse*.prefs