我可以隐藏提交吗?我推送GitHub的时候?

时间:2015-03-03 12:47:48

标签: git logging github timestamp

正如标题所说:我希望我推送到GitHub的所有提交都会在GitHub的提交标签中显示推送的时间戳而不是提交的时间戳。

我使用了相当标准的工作流程:

<do some work>
git add -u
git commit -m "Message 1."
...
<do some work>
git add -u
git commit -m "Message N."
git push myrepo master

这使得所有N提交都显示在GitHub中,这很好并且很好。但是也显示了提交的时间,我不喜欢。我更希望只显示最后一个(或推送)的时间戳。

2 个答案:

答案 0 :(得分:2)

GitHub推送时间

您可以在GitHub API上永久查看推送的时间。如果要隐藏它,别无选择:使用cron作业。

提交数据时间

可以通过环境变量控制提交数据的提交时间:

GIT_COMMITTER_DATE=2000-01-01T00:00:00+0000 \
GIT_AUTHOR_DATE=2000-01-01T00:00:00+0000 \
git commit -m 'my message'

对于--amend,使用--date选项作为作者日期:How can one change the timestamp of an old commit in Git?

no further time indications on the commit message object,因此足以保证隐私。

您可能希望通过post-commit钩子自动执行此操作,如以下说明所述:Can GIT_COMMITTER_DATE be customized inside a git hook?

这是一个更高级的钩子,它使您的提交将在每天的午夜和increment by one second for every new commit开始。这样可以使提交按时间排序,同时仍隐藏提交时间。

.git / hooks / post-commit

#!/usr/bin/env bash
if [ -z "${GIT_COMMITTER_DATE:-}" ]; then
  last_git_time="$(git log --date=format:'%H:%M:%S' --format='%ad' -n 1 --skip 1)"
  last_git_date="$(git log --date=format:'%Y-%m-%d' --format='%ad' -n 1 --skip 1)"
  today="$(date '+%Y-%m-%d')"
  if [ "$last_git_date" = "$today" ]; then
    new_time="${last_git_time}"
    new_delta=' + 1 second'
  else
    new_time="00:00:00"
    new_delta=
  fi
  d="$(date --date "${today}T${new_time}${new_delta}" "+${today}T%H:%M:%S+0000")"
  echo "$d"
  GIT_COMMITTER_DATE="$d" git commit --amend --date "$d" --no-edit
fi

GitHub upstream

别忘了:

chmod +x .git/hooks/post-commit

在git 2.19,Ubuntu 18.04上进行了测试。

别忘了还要处理:

否则提交者日期仍会泄漏。

批量历史记录修改

这是一种将现有范围内所有提交的提交时间固定为午夜,同时保持日期不变的方法:

git-hide-time() (
  first_commit="$1"
  last_commit="${2:-HEAD}"
  git filter-branch --env-filter '
d="$(echo "$GIT_COMMITTER_DATE" | sed "s/T.*//")T00:00:00+0000)"
export GIT_COMMITTER_DATE="$d"
export GIT_AUTHOR_DATE="$d"
' --force "${first_commit}~..${last_commit}"
)

另请参阅:How can one change the timestamp of an old commit in Git?

答案 1 :(得分:0)

您有几种选择:

  • 编写 webhooks ,抓住推送事件并将日期修改为当前时间戳。
  • 更好的方法是编写本地挂钩,在推前修改时间戳