【问题标题】:Change timezone for all commits in git history更改 git 历史记录中所有提交的时区
【发布时间】:2015-09-06 17:40:09
【问题描述】:

我正在将旧的 CVS 存储库转换为 git,它运行良好,除了所有提交都使用 UTC 而不是每个作者的本地时区。

我想根据每个作者更改这些提交的时区,例如,一位作者的所有提交都从 +0000 更改为 +1000,而其他作者的提交保持不变。 (所以我可以为每个作者执行一次此过程。)

实际时间应该保持不变,因此当前为02:00:00 +0000 的提交应该变为12:00:00 +1000。

像git filter-branch 这样的东西可以吗?

【问题讨论】:

标签: git timezone git-filter-branch


【解决方案1】:

我想出了这个,这似乎可以解决问题:

git filter-branch --env-filter '
    if [ "$GIT_AUTHOR_EMAIL" == "email@example.com" ]; then
        export GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE | sed s/+0000/+1000/`
    fi
    if [ "$GIT_COMMITTER_EMAIL" == "email@example.com" ]; then
        export GIT_COMMITTER_DATE=`echo $GIT_COMMITTER_DATE | sed s/+0000/+1000/`
    fi'

这会将作者 email@example.com 的时区从 +0000 更改为 +1000。如果时区在给定的提交中已经是其他内容,那么它将保持不变。如果此人是作者但不是提交者(反之亦然),则只会更新其角色的日期。

正如@MattJohnson 指出的那样,它不会处理由于 DST 导致的 UTC 偏移量的变化,但如果需要,也许您可​​以为此添加额外的标准。

这通过利用 git 的内部日期格式来工作,该格式始终以自纪元以​​来的秒数为单位,看起来像 @12345 +0000。此处不使用时区(秒数始终以 UTC 表示),这允许您更改时区而不更改所引用的有效时间。在此处更改 UTC 偏移量只会影响日期的默认格式。

【讨论】:

    【解决方案2】:

    除了@Malvineous 的回答:

    如果可以使用当前用户的时区作为参考,您可以使用 Git 进行 DST 转换。这对我有用,将所有提交的时区修复为当前时区,包括 DST 更改。

    git filter-branch --env-filter '
      if [ "$GIT_AUTHOR_EMAIL" == "email@example.com" ]; then
        GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE|sed -e "s/[+-][0-9]\{4\}//g"`
      fi
      if [ "$GIT_COMMITTER_EMAIL" == "email@example.com" ]; then
        GIT_COMMITTER_DATE=`echo $GIT_COMMITTER_DATE|sed -e "s/[+-][0-9]\{4\}//g"`
      fi
    '
    

    sed 行剥离时区。其余的由 GIt 处理。

    请注意,这不支持最初请求的明确时区,但会处理 DST。

    注意: 原始答案有一个使用date 的附加行,例如,

    GIT_AUTHOR_DATE=`date --date=$GIT_AUTHOR_DATE`
    

    但是,这不是必需的,因为句柄在未指定时使用当前时区(包括 DST)。因此,切分时区就足够了。

    【讨论】:

    • 不确定这里的“夏令时转换”是什么意思,但是当我在冬天用 TZ=Europe/London 运行它时,它一直转换为 UTC(+0000)并且没有处理这个事实一些提交是在去年夏天伦敦使用英国夏令时时进行的。 (我一直在尝试从设置为美国时区的美国服务器中整理出我一直在提交的存储库,我宁愿在提交时记录我当地的英国时间。)
    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2021-01-06
    • 2018-04-19
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2021-02-22
    • 2015-07-24
    相关资源
    最近更新 更多