时间:2021-05-19
1 背景
gitlab某仓库有同事发现部分代码文件内容丢失,具体表现
A. dev分支commit信息是连续的,看不出明显的大时间范围批量丢失
B. 以SuncardCashier/control/CSymbolEdit.h为例,在1c88f613下只能看到2个历史相关提交
但是1天前提交的bfff1f51,也有此文件的修改提交,意味着bfff1f51这个提交“丢失”了
2 追查过程
2.1 gitlab server侧寻找线索
表面上像是gitlab server出现了某些问题导致“丢失”,所以查看/var/log/gitlab/gitlab-rails/下的production.log日志(production.log是当天的,production.log.31.gz是更早日期压缩后的,需要解压查看)。
但是通过查看日志只有一些查看上述commit的api access log,并无有效线索。并且同时段的其他仓库可以看到commit信息
2.2 gitlab network graph寻找线索
此时怀疑是有人在本地误使用rebase等命令再force push导致server的commit丢失,通过gitlab的network graph是一个高效的梳理手段
首先在network grapsh搜索bfff1f51(灰色箭头指向),这也说明gitlab server其实有此commit数据
这里不同颜色线相当于是dev分支不同的提交人,最右侧红线为主分支,其中线之间的箭头是merge。查看图中bfff1f51之后各线最邻近的merge,基本都还可以看到bfff1f51这个提交,说明正常。除了红色箭头标识的左侧绿线!
此提交为d5049b0,可以看到该文件已经没有bfff1f51提交了
继续到绿线分支更后的操作追查,之后它merge到了粉线(左起第二),粉线再merge到了兰线(左起第三),粉线再merge到了红线(左起第四)。而“丢失”情况如下图示,即被绿线merge前都正常,merge后都丢失了
3 结论
至此,可以基本确定是d5049b0进行了类似rebase回滚到之前提交的行为(其commit message也填写的是“冲突”),另外可以看到该仓库设置的protected branch只有master,无dev,所以是具备force push条件的
4 建议的改进措施:
A. 将dev等需重点分支禁止force push
B. 开发人员对于git回滚等操作需谨慎对待
“用来记录生命的演进,故事的迭代。期望做一个给大家带来帮助和思考的平台” ——深邃老夏
到此这篇关于浅析git server“丢失”commit问题的文章就介绍到这了,更多相关git server“丢失”commit内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Git仓库迁移而不丢失log的方法要求能保留原先的commit记录,应该如何迁移呢?同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢?注意:
问题重现:当前系统Ubuntu16shell进行字符串截取运行${GIT_COMMIT:0:6}报错:/tmp/jenkins75058554614067225
本文用到了node-git-server1、检测本地git版本该包的使用需要机器上本来就安装git,且git的版本大于等于2.7:╭─root@lt/home/
GitPython是一个用于操作Git版本库的python包,它提供了一系列的对象模型(库-Repo、树-Tree、提交-Commit等),用于操作版本库中的相
问题:已知Vuex中通过actions提交mutations要通过context.commit(mutations,object)的方式来完成然而commit中