问题
I wanna see how much a repo changed in the last month on gitlab server side
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
However it works fine in local checkout-ed working branch.
Is there a way to do this without too much hassle?
To avoid X-Y problem: I wanna run statistics through hundreds of repos on a Gitlab server
回答1:
Try and make sure, when diff'ing in a bare repo, to specify two commits (or diff would default to the working tree, which doesn't exist in a bare repo).
You don't need --git-dir .
However, using date when specifying a revision wouldn't work, as it is based on logs/refs
, which doesn't exist in a bare repo
<refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
A ref followed by the suffix @ with a date specification enclosed in a brace pair (e.g.
{yesterday}
,{1 month 2 weeks 3 days 1 hour 1 second ago}
or{1979-02-26 18:30:00}
) specifies the value of the ref at a prior point in time.
This suffix may only be used immediately following a ref name and the ref must have an existing log ($GIT_DIR/logs/<ref>
).
回答2:
I found this question because I was getting fatal: This operation must be run in a work tree
If you are getting the error (in your bare repo):
[ec2-user@xxxxx git]$ git diff 81dcb182e4d16b6894b69a5b31133b8d8ff6c5e2
fatal: This operation must be run in a work tree
Ensure you are providing two commit hashes to diff.(as HEAD is a symbolic ref)
[ec2-user@xxxxx git]$ git diff <BASE COMMIT HASH> <UPDATE COMMIT HASH>
Eg.
[ec2-user@xxxxx git]$ git diff 11dcb182e4d16b6894b69a5b31133b8d8ff6c5ex 81dcb182e4d16b6894b69a5b31133b8d8ff6c5e2
来源:https://stackoverflow.com/questions/25638767/git-diff-on-a-bare-repo