1、?Git?蒋 鑫?gotgit?http:/ Git contributor(git clean-i,.)Git l10n coordinator(https:/ 2015.12 加入华P iSource g队“?”Git F3mily?Distributed;freedom;commit any where,any timeGeekyFork+Pull Request Social coding UIProject by project,not a platform Centralized,lack of freedom Just for review,and the UIReview in
2、 Google style Multi-repo solution:repoSync of fork repos;waste of disk spaces Multi-repo management,git submodule?Google DEyle code CeGieH foC GiE GiEHFb AoHeCed E:e H:ole oAen DoFCce?阿里腾讯?MicrosoftVSTSOMEGA Git?Git?1?clone?Fresh clone,and hard linksAfter new push and GC?2?Strange procedureoriginups
3、tream?How about 100 repos?forkFork 1Repo 1forkFork 2Repo 2forkFork100Repo 100.How about topic branches?slow down clone/fetch loose references?high IO chaos of visibility of all refsBoring proceduregitremoteaddupstreamURLgitfetchupstreamgitrebaseupstream/mastergitpush-foriginHEADforkoriginupstream?3?
4、Multiple repos in one project,why?GC,clone are quite slow for big repos;auth;micro services git submodule?Recurisive submodules:?Update of gitlinks.?Conflict of gitlinks.?2016?iSource?20?1000?.No fork,no feature branch,and no submodulesOMEGA?No foCk CCe3Ee-R MR by AFD:DC3fE mode-R MR No fe3EFCe bC3n
5、c:/Aeci3l CefeCeneD:CefD meCgeD 123:e3d No DFbmodFleD M3nifeDE CeAo 3nd 1ML giE-mm:CeHCiEe CeAo in gol3ng foC OMEGAi/oFCcegit push -receive-pack=omega origin HEAD:refs/for/target-branch/local-branchgitlab-shell(omega?)giE-CeceiGe-A3ck-omeg3GiE HookD omeg3-meCge-CeqFeDE omeg3-ACe-CeceiGe omeg3-AoDE-C
6、eceiGeAPI#1 GET/ssh-infoAPI#3 POST super-mrAPI#2 POSTmerge-requestAPI#4 GET super-mr/:idDC3fE meCge CeqFeDEOne-stop Multi-Endpoints Git AccessOMEGA?git push origin HEAD:refs/for/master/my/topic1#more git commit.git push origin HEAD:refs/for/master/my/topic1 git push origin HEAD:refs/for/master/my/to
7、pic2N种oS流的n比?VS派生分y比较c起MRmtMR创r克隆本i分yw交v送xXMR说明删除分yfM游d步cloneloc3l bC3nc:giE CeGieHMR cCe3EedcommiEGerrit?OMEGAGerritOMEGA?-receive-pack=gerrit receive-pack options-receive-pack=omega options?Change(per commit)Merge Request(per feature)?refspecHEAD:refs/for/master HEAD:refs/drafts/masterHEAD:refs/fo
8、r/master/local/branch HEAD:refs/drafts/master/local/branch?git hook:commit-msg?Change-Id:I.No client side hooks?MR?Manifest?repo Only for Linux Only support multiple repos Clone from bundlegit-mm?Linux?Windows?git-lfs?bundle*?batch query*kRq管理oW git-mmGit-MM?Git Multi-ModuleL?Android repo方案L是适配 OMEG
9、A 的 repoL用 Golangsc。w供统一的Git环境设置。?Autodesk/enterprise-config-for-git d时w供kRfaR解Y方案。git config-global alias.review“git-mm-single”Bundle?batch request?git mm init-u URL git mm sync git mm upload git reviewXML.XMLMM GiEoS流创新?Git?Gitlab(8.10)?git fetch-pack/git send-pack?PipeSSHCGI?git upload-pack/git r
10、eceive-packGit?gitlab-railsUnicornauth reqPIPEOpenSSHgitlab-shellauth reqPIPEAPIgit upload-pack/git receive-packGit?git upload-pack/git receive-packRuggedlibgit2Git over SSHGit over HTTPRedisDatabaseGitlab Web UIgitlab-workhorseNginx.ssh/authorized_keyssidekiqCPU?IO?Google?GitHub?Git Git jGit Git Gi
11、t Git GCBigtableGFS Git Git GerritOpenSSHLBMySQLSSH TunnelRouteLBWebWebRouteRPCRouteRPCGit+RPCABCDOpenSSHMySQLGit+RPCABCDDRBDGit+RPCEFGHGit+RPCEFGHGit+RPCJKLMGit+RPCJKLMGit+RPCABDKGit+RPCCMQAGit+RPCELMAhealing&re-balanceSpokes(DGit),2016iSource?SSH TunnelOpenSSH(Auth by MySQL)gitlab-shellSSH Tunnelg
12、itlab-railsUnicornRPCclientGit over SSHGit over HTTPRedisDatabaseGitlab Web UIgitlab-workhorseNginxGit+RPCGit+RPCGit+RPC.NAS1NAS2NAS3.GSAND(routing micro service)OpenSSH(Auth by MySQL)gitlab-shellLB(LVS-DR)gitlab-railsUnicornRPCclientgitlab-workhorseNginxTODO Git?NFS?iSource?GSAND-MDC Msg QueueDC1Ng
13、inxLuagitlab-workhorseNginxOpenSSHgitlab-shellR/W?Check on mirror statusA mirrorRemoteTunnelGit SyncDC2NginxLuagitlab-workhorseNginxOpenSSHgitlab-shellA masterReGeCDe-CoxyRe3dWCiEe.Local Tunnel2eDNo.Gitlab?gitlab-railsUnicornOpenSSHgitlab-shellgitaly-upload-packgitaly-receive-packgitaly handlerGit o
14、ver SSHGit over HTTPGitlab Web UIgitlab-workhorseNginxGitalyclient?How We Knew It Was Time to Leave the Cloud?Why we are not leaving the cloud?“dont want to be an infrastructure company”“using the simplest,most boring solution for a problem”Git/GitalyGit/GitalyGit/GitalyGit/GitalyAPIauthauthJSON(shard)JSON(shard)Git/Gitaly.gR-C?Pull Request?submodule?git-mm?xxx?Git?xx TB?Gitlab?Git at Google:Making Big Projects(and Everyone Else)Happy,Dave Borowitz-Git Merge 2015 How We Made GitHub Fast(2009)Introducing DGit(2016)Building resilience in Spokes(2016)