首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gitlab CI中,Git blame的结果与在本地机器上的结果不同。

在Gitlab CI中,Git blame的结果与在本地机器上的结果不同。
EN

Stack Overflow用户
提问于 2020-09-24 07:47:50
回答 2查看 200关注 0票数 1

我创建了一个小型shell脚本,它使用git blame的输出生成一些报告。这在我的本地机器上很好用。但是,我想将shell脚本集成到我们的gitlab /cd管道中,由于某种原因,当我在gitlab上运行git blame时,所有的行都归功于我和最新的提交。

以下是我在管道文件中调试此问题的内容:

代码语言:javascript
复制
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时,我得到:

代码语言:javascript
复制
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输出如下所示:

代码语言:javascript
复制
^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命令在服务器上输出以下内容:

代码语言:javascript
复制
HEAD detached at 5e95b8e5
nothing to commit, working tree clean

这看起来很好,因为5e95b8e5是最新提交的散列。

让我困惑的还有git log在gitlab上的输出,因为它只显示了一次提交而没有历史记录:

代码语言:javascript
复制
commit 5e95b8e5efcfd155d4248f4849b848e9f1580a20
Author: Sebastian Gellweiler <sebastian.gellweiler@dm.de>
Date:   Thu Sep 24 09:32:54 2020 +0200

    ...

这就是我本地机器上的历史记录:

代码语言:javascript
复制
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
    
[...]

如您所见,在我的本地机器和遥控器上,顶级提交哈希是相同的。

我被困在这里了。有人能解释一下这种差异吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-24 08:11:30

我认为您已经将GitLab配置为创建一个深度为1的浅克隆,因为它只有一个提交,所以存储库中的每个文件都是由于存储库中的(单个,一个)提交而产生的,所以这就是它生成的散列ID。

特别是,这个表示法:

代码语言:javascript
复制
^5e95b8e5

指示Git知道在5e95b8e5之前有一些东西,但不知道它是什么,在本例中,它是浅存储库的标记。(从技术上讲,它是一个边界标记,如果您使用了范围表达式(如abc1def..HEAD ),您将在其他提交中看到它。可以使用-b选项或一些配置项来更改这些项的显示方式。)

票数 4
EN

Stack Overflow用户

发布于 2020-09-24 07:59:23

Git只提交与父母的连接,Git只能回顾历史。如果您的提交签出时间大于5e95b8e5,您将不会在git blamegit log中看到它。

或者,您的本地回购已经过时,您需要git pull

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64041783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档