Gerrit 大量代碼提交流程優化


# Gerrit 大量代碼提交流程優化

背景

本文適用於 提交大量初始代碼 的場景(倉庫版本的早期)。

有時候提交大量代碼到Gerrit的時候會提示:

$ git push
Counting objects: 512996, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (482705/482705), done.
Writing objects: 100% (512996/512996), 2.61 GiB | 9.46 MiB/s, done.
Total 512996 (delta 123942), reused 624 (delta 117)
remote: Resolving deltas: 100% (123942/123942)
remote: Counting objects: 512999, done
remote: Processing changes: refs: 1, done
To ssh://xx@xx:29418/xxx
 ! [remote rejected] master -> refs/for/master (commit bb5b175: Exceeding maximum number of files per change (499908 > 100000))
error: failed to push some refs to 'ssh://xx@xx:29418/xxx'

此后就需要花費大量的人力到提交代碼上,降低開發效率;因此有必要解決這樣的問題。

注意,用這種方法提交的代碼不會在Gerrit-Code Review區域顯示,因此本文最適用於 提交初始代碼 的場景,為了規范技術管理,其他場景的操作最好向管理員報備后再操作

做法

思路很簡單,提交的時候繞過refs/for/ 和refs/heads/即可。

在Gerrit中添加權限

入口:點擊Gerrit倉庫,找到AccessEditADD REFERENCE

為了以防萬一,添加一個組,賦予強推權限。

Gerrit新建強推組:syncer

> 實際上,下面的權限是我先通過`git push --force`以后,根據錯誤提示再一步步配置了Gerrit的權限得到的。

1、refs/heads/master

  • Push:ALLOW - sysncer - Allow pushing with or without force
  • Forge Committer Identity:ALLOW - sysncer
  • Forge Author Identity:ALLOW - sysncer

2、refs/remotes/origin/master

  • Create Reference:ALLOW - sysncer
  • Delete Reference:ALLOW - sysncer

3、refs/for/refs/heads/master

  • Create Reference:ALLOW - sysncer
  • Delete Reference:ALLOW - sysncer

提交方式

0、找到Gerrit的倉庫地址,${Gerrit-repo}

1、拉取需要提交的Gerrit代碼倉庫:

git clone ${Gerrit-repo}

2、提交

注意,一般的Gerrit倉庫要提交代碼之前需要:config refs/heads/*:refs/for/*,但是在這里不需要。

git push

# 必要時,使用強推命令。
git push --force --mirror 

結果:

Counting objects: 136002, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (125500/125500), done.
Writing objects: 100% (136002/136002), 971.01 MiB | 9.36 MiB/s, done.
Total 136002 (delta 27908), reused 0 (delta 0)
remote: Resolving deltas: 100% (27908/27908)
remote: Counting objects: 136015, done
remote: Processing changes: refs: 1, done
To ssh://xx@xx:29418/xx
   610d066..c3d6d87f master -> master

3、驗證:在另外的地方git clone下來看看git log記錄,看看提交信息是否健全。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM