将来几个月从存储库中移出所有提交

问题描述 投票:0回答:1

我一直在研究如何将回购中的所有先前提交转移到以后的日期。到目前为止我发现的是

`git filter-branch --env-filter 
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'`

但是,如果我通过提交进行提交,那么这很好。但有没有办法通过回购中的所有提交并在一年后自动移动它而不是手动移动大量的提交?谢谢。

编辑:只是为了让人们不要投票,因为这是不好的做法等,我这样做的原因是试验github的贡献图表/图表。这是一个单独用户的个人回购,没有其他贡献者。

git github
1个回答
1
投票

重写Git历史的通常告诫适用于此 - 您的历史将不再匹配存储库的其他副本,您必须强制推送,但强制推动是危险的,所以你应该改为--force-push-with-lease等等。我不会在这里质疑你的动机,因为我认为应该众所周知,来自第三方的未签名Git历史很容易被伪造 - 你也可以在你的Git历史中轻易地放置你想要的任何作者。从个人角度来说,我有点不高兴我的个人习惯和唤醒/睡眠周期可以从我的GitHub帐户中删除,所以我可以理解清理这些数据的愿望。

怎么做

困难的部分是在shell脚本中正确操作日期。过滤器中的日期将以date +'@%s %z'给出的格式给出,例如@1536176083 -0400可能是其中一个值。问题是像“四个月之后”这样的日历算法在这一点上实际上甚至不可能,因为不知道原始时区是什么,我们无法知道四个月后正确的时区偏移是什么。换句话说,Git根本不存储时区,所以如果你想保留你需要重建它的时区,这很困难。

我们可以轻松地做到的只是通过添加或减去几秒来修改时间戳,然后将所有内容放在本地时区。例如,

git filter-branch --env-filter '
set $GIT_COMMITTER_DATE
GIT_COMMITTER_DATE=@$((${1#@} + 24*60*60))
set $GIT_AUTHOR_DATE
GIT_AUTHOR_DATE=@$((${1#@} + 24*60*60))
'

这将把提交重写为原始值后的1天(24*60*60是当天)。时区将是所有事物的当地时区。如果要保留原始提交的时区,这将成为一个更加困难的问题,可能需要更多的人工干预。

如果要选择特定时区,可以在运行Git时设置TZ环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.