背景
本文適用於 提交大量初始代碼 的場景(倉庫版本的早期)。
有時候提交大量代碼到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倉庫,找到
Access
,Edit
;ADD REFERENCE
。
為了以防萬一,添加一個組,賦予強推權限。
Gerrit新建強推組:syncer
。
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
記錄,看看提交信息是否健全。