前期準(zhǔn)備工作:
本實(shí)例用Android源碼為例:
校驗(yàn)文件完整性
md5sum android-11.0-mid-rkr12.10.tar_a*
將多個(gè)文件重定向到新的壓縮文件中(文件名自取)
cat android-11.0-mid-rkr12.10.tar_a* > rk3568_android.tar
解壓文件 或解壓到指定文件夾
tar -xvf rk3568_android.tar
檢出項(xiàng)目
repo sync -l
建議上傳 Android 系統(tǒng)源碼前先編譯源碼,由于部分平臺(tái)源碼中含有下載更新提取等操作。
貿(mào)然刪除所有 Git 或者 repo 會(huì)導(dǎo)致這部分操作異常編譯失敗,尤其是使用 repo 管理的系統(tǒng)源碼。
先編譯將此類文件操作完成之后再上傳,并修復(fù)這類可能存在的操作。
源碼中采用repo來(lái)管理,本實(shí)例采用單git管理。
一、創(chuàng)建 gitlab 倉(cāng)庫(kù) (創(chuàng)建后會(huì)有如下提示,如果是比較小的項(xiàng)目可以直接使用)
Git 全局設(shè)置
git config --global user.name "name"
git config --global user.email "email"
創(chuàng)建一個(gè)新倉(cāng)庫(kù)
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
推送現(xiàn)有文件夾
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
推送現(xiàn)有的 Git 倉(cāng)庫(kù)
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倉(cāng)庫(kù)
進(jìn)入源碼根目錄
cd /path/to/rk3568_android13
初始化Git倉(cāng)庫(kù)
git init
配置用戶信息(已配置,可跳過(guò))
git config user.email "email"
git config user.name "name"
1.1 檢查是否已有Git倉(cāng)庫(kù)
ls -la | grep .git
檢查是否有其他.git目錄
find . -name ".git" -type d
1.2 刪除原有的git記錄
刪除.repo目錄(Repo工具管理目錄)
rm -rf .repo/
刪除所有子項(xiàng)目中的.git目錄(重要?。?/p>
find . -name ".git" -type d ! -path "./.git" -exec rm -rf {} + 2>/dev/null
三、根目錄下(如果沒(méi)有)創(chuàng)建.gitignore文件
創(chuàng)建適當(dāng)?shù)?code>.gitignore文件來(lái)忽略不必要的文件:(系統(tǒng)原有的忽律文件可能不完整,需要根據(jù)實(shí)際需要額外添加。)
.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
四、添加遠(yuǎn)程倉(cāng)庫(kù)地址
添加GitLab遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin git@192.168.30.233:xxxx.git
驗(yàn)證遠(yuǎn)程倉(cāng)庫(kù)
git remote -v
五、如果遇到大文件推送問(wèn)題
由于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
六、準(zhǔn)備首次提交
添加所有文件到暫存區(qū)
git add .
檢查將要提交的文件
git status
進(jìn)行首次提交
git commit -m "初始提交: RK3568 Android 13.0系統(tǒng)源碼
- 基于RK3568平臺(tái)的Android 13.0源碼
- 包含完整的系統(tǒng)構(gòu)建環(huán)境
- 版本: android-13.0-mid-rkr6.1
- 提交時(shí)間: $(date)"
七、分階段添加和提交(推薦)
由于Android源碼很大,建議分階段提交:
先添加小文件和非二進(jìn)制文件
git add *.mk *.bp Android.mk Android.bp Makefile *.sh
git add build/ device/ hardware/ system/ frameworks/
提交第一次
git commit -m "初始提交: Android 13.0基礎(chǔ)框架"
再添加其他目錄
git add .
git commit -m "添加完整源碼"
或者使用更細(xì)的提交策略
git add bionic/ bootable/ development/
git commit -m "添加系統(tǒng)組件"
git add external/ packages/ vendor/
git commit -m "添加外部包和供應(yīng)商代碼"
八推送到遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin git@192.168.30.233:xxxx.git
git branch -M main
git push -u origin main
如果推送中斷或失敗,可以使用以下恢復(fù)策略:
方法1:繼續(xù)推送(如果支持)
git push --progress
方法2:淺層推送(如果完整推送失?。?/p>
git push --depth 100 origin main # 先推送最近100個(gè)提交
方法3:分批推送
git push origin main:temp-branch # 推送到臨時(shí)分支
可使用一下命令查看 git 狀態(tài):
ps aux | grep git
九、誤提交的修補(bǔ)
如果文件已誤提交:若 .classpath文件已經(jīng)被意外提交到了 GitLab 倉(cāng)庫(kù),
可以執(zhí)行以下命令將其從版本控制中移除,但保留在本地,然后將 .classpath加入 .gitignore,再提交這次更改。
git rm --cached **/.classpath
移除所有 .settings 目錄
git rm -r --cached **/.settings/
移除所有 .prefs 文件
git rm --cached **/*eclipse*.prefs