我创建了一个小型shell脚本,它使用git blame的输出生成一些报告。这在我的本地机器上很好用。但是,我想将shell脚本集成到我们的gitlab /cd管道中,由于某种原因,当我在gitlab上运行git blame时,所有的行都归功于我和最新的提交。
以下是我在管道文件中调试此问题的内容:
run-git-blame:
stage: mystage
image: alpine
before_script:
- apk add bash git gawk
- git status
- git log
script:
- git blame HEAD -- somefile.txt当我在本地运行git blame HEAD -- somefile.txt时,我得到:
4588eb70a0b (DXXXXXXX 2019-05-07 15:35:22 +0200 1) abc=123
4588eb70a0b (DXXXXXXX 2019-05-07 15:35:22 +0200 2) def=456
4588eb70a0b (DXXXXXXX 2019-05-07 15:35:22 +0200 3) ghi=789
4588eb70a0b (DXXXXXXX 2019-05-07 15:35:22 +0200 4) jkl=abc
4588eb70a0b (DXXXXXXX 2019-05-07 15:35:22 +0200 5) mno=def
[...]然而,gitlab ci输出如下所示:
^5e95b8e5 (Sebastian Gellweiler 2020-09-24 09:32:54 +0200 1) abc=123
^5e95b8e5 (Sebastian Gellweiler 2020-09-24 09:32:54 +0200 2) def=456
^5e95b8e5 (Sebastian Gellweiler 2020-09-24 09:32:54 +0200 3) ghi=789
^5e95b8e5 (Sebastian Gellweiler 2020-09-24 09:32:54 +0200 4) jkl=abc
^5e95b8e5 (Sebastian Gellweiler 2020-09-24 09:32:54 +0200 5) mno=def
[...]但我绝对没有碰过正在检查的文件。
git status命令在服务器上输出以下内容:
HEAD detached at 5e95b8e5
nothing to commit, working tree clean这看起来很好,因为5e95b8e5是最新提交的散列。
让我困惑的还有git log在gitlab上的输出,因为它只显示了一次提交而没有历史记录:
commit 5e95b8e5efcfd155d4248f4849b848e9f1580a20
Author: Sebastian Gellweiler <sebastian.gellweiler@dm.de>
Date: Thu Sep 24 09:32:54 2020 +0200
...这就是我本地机器上的历史记录:
commit 5e95b8e5efcfd155d4248f4849b848e9f1580a20 (HEAD -> feature/XXX)
Author: Sebastian Gellweiler <sebastian.gellweiler@example.org>
Date: Thu Sep 24 09:32:54 2020 +0200
...
commit bc689804f87d906e1b2435249fc1aaaf32e49b20
Author: Sebastian Gellweiler <sebastian.gellweiler@dm.de>
Date: Wed Sep 23 18:40:18 2020 +0200
XXX
commit 9d6fa2336aee0938aef0bd78563b6f12dee5934f (master)
Merge: 90ef282515 3eabec88c2
Author: XXXX <XXX@example.org>
Date: Thu Sep 17 08:31:20 2020 +0000
XYZ
[...]如您所见,在我的本地机器和遥控器上,顶级提交哈希是相同的。
我被困在这里了。有人能解释一下这种差异吗?
发布于 2020-09-24 08:11:30
我认为您已经将GitLab配置为创建一个深度为1的浅克隆,因为它只有一个提交,所以存储库中的每个文件都是由于存储库中的(单个,一个)提交而产生的,所以这就是它生成的散列ID。
特别是,这个表示法:
^5e95b8e5指示Git知道在5e95b8e5之前有一些东西,但不知道它是什么,在本例中,它是浅存储库的标记。(从技术上讲,它是一个边界标记,如果您使用了范围表达式(如abc1def..HEAD ),您将在其他提交中看到它。可以使用-b选项或一些配置项来更改这些项的显示方式。)
发布于 2020-09-24 07:59:23
Git只提交与父母的连接,Git只能回顾历史。如果您的提交签出时间大于5e95b8e5,您将不会在git blame或git log中看到它。
或者,您的本地回购已经过时,您需要git pull。
https://stackoverflow.com/questions/64041783
复制相似问题