裸机上的git diff

时间:2014-09-03 07:36:40

标签: git git-diff git-log

我想看看上个月在gitlab服务器端改变了多少回购

cd /path/to/my/bare/repo.git/
git --git-dir . diff --shortstat "@{1 month ago}"
fatal: Unable to read log 'logs/refs/heads/master': No such file or directory

然而,它在本地结账工作分支中工作正常。

有没有办法在没有太多麻烦的情况下做到这一点?

避免X-Y问题:我想通过Gitlab服务器上的数百个repos运行统计信息

2 个答案:

答案 0 :(得分:3)

尝试并确保,当在一个裸仓库中进行差异时,指定两个提交(或者diff会默认为工作树,而 bare repo中不存在)。

您不需要--git-dir .

然而,当specifying a revision不起作用时使用日期,因为它基于logs/refs,它不存在于裸仓库中<\ n / p>

<refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
  

后跟@后缀为@,括号对中包含日期规范(例如{yesterday}{1 month 2 weeks 3 days 1 hour 1 second ago}{1979-02-26 18:30:00}),指定前一点的ref值。时间。
  此后缀只能在引用名称后立即使用,并且引用必须具有现有日志($GIT_DIR/logs/<ref>

答案 1 :(得分:0)

我发现了这个问题,因为我收到了fatal: This operation must be run in a work tree

如果您收到错误(在您的裸仓库中):

[ec2-user@xxxxx git]$ git diff 81dcb182e4d16b6894b69a5b31133b8d8ff6c5e2
fatal: This operation must be run in a work tree

确保要为差异提供两个提交哈希(因为HEAD是符号引用)

[ec2-user@xxxxx git]$ git diff <BASE COMMIT HASH> <UPDATE COMMIT HASH>

例如。

[ec2-user@xxxxx git]$ git diff 11dcb182e4d16b6894b69a5b31133b8d8ff6c5ex 81dcb182e4d16b6894b69a5b31133b8d8ff6c5e2