删除所有git提交的时间和时区,但保留日期

删除所有git提交的时间和时区,但保留日期,git,git-commit,Git,Git Commit,我想删除在存储库中创建的所有提交的时间,特别是时区信息。可能吗?如果没有,是否可以简单地将时间设置为00:00,时区设置为+0000? (顺便说一句,我想保留日期。这只是我不想要的时间和时区。) 我只发现了一些问题,但没有发现任何关于在所有提交中更改属性并保留剩余信息的问题 是的,我知道有其他方法可以让人们知道我住在哪里等,但这对我来说已经足够好了。我从来都不需要使用它,但这里有人创建了一个插件来管理这种情况。您可以在此处访问代码:您不能“不存储时间”,但您可以始终将时间设置为00:00,将TZ

我想删除在存储库中创建的所有提交的时间,特别是时区信息。可能吗?如果没有,是否可以简单地将时间设置为
00:00
,时区设置为
+0000

(顺便说一句,我想保留日期。这只是我不想要的时间和时区。)

我只发现了一些问题,但没有发现任何关于在所有提交中更改属性并保留剩余信息的问题


是的,我知道有其他方法可以让人们知道我住在哪里等,但这对我来说已经足够好了。

我从来都不需要使用它,但这里有人创建了一个插件来管理这种情况。您可以在此处访问代码:

您不能“不存储时间”,但您可以始终将时间设置为00:00,将TZ设置为+0000

对于新提交,最直接的方法是设置
GIT\u提交者日期
GIT\u作者日期
环境变量。例如,在
bash
命令行中,您可以说

export GIT_COMMITTER_DATE="$(date +%Y-%m-%d) 00:00:00+0000"
export GIT_AUTHOR_DATE="$(date +%Y-%m-%d) 00:00:00+0000"
你要确保在每天的第一次承诺之前做到这一点;也许可以将其添加到登录脚本或其他内容中

您的措辞表明您可能也有提交的历史记录。也可以通过使用
git filter branch
env filter
选项来更改。有关如何工作的详细信息,请参阅位于的
过滤器分支
文档


但是,重要的是要理解,这是一次历史重写,也就是说,您将用新的提交替换所有现有的提交,如果其他任何人共享此回购,这将使他们处于中断状态,需要一些恢复。(请参阅git rebase文档中的“从上游rebase中恢复”以了解所涉及的内容。)实际上没有办法解决这个问题-提交日期和作者日期是每个提交不可分割的一部分。

警告:编辑提交的任何信息都会更改其哈希值, 因此,所有子代提交的哈希可能导致 如果其他人已经获取了提交 问题


如前所述,可以用来重写多次提交 一次

仅编辑时间戳可以通过its完成 :

如果只需要修改所处的环境,则可以使用此筛选器 将执行提交。具体来说,您可能需要重写 作者/提交人姓名/电子邮件/时间环境变量(请参阅 git提交树(详细信息)

具体来说,可以设置
GIT\u作者日期
GIT\u提交人日期
git中具有值的环境变量:

它是,其中是自UNIX时代以来的秒数。是UTC的正偏移或负偏移。例如大学英语四级考试(哪个 比UTC早1小时)is+0100

警告:以下代码示例立即重写整个树

它们可以简单地放在环境过滤器中

我想删除所有的时间,特别是时区信息 已在存储库中创建的提交

仅删除时区信息,只需设置日期即可 变量到
$timestamp+0000

git过滤器分支--env过滤器'
GIT_AUTHOR_DATE=“$(GIT show-q--format=“%at”“$GIT_COMMIT”)+0000”
GIT_提交人_日期=“$(GIT show-q--format=“%ct”“$GIT_提交”)+0000”
”“全部
(顺便说一句,我想保留日期。我不知道的只是时间和时区 需要。)

删除时间和时区,这有点棘手 (使用ISO 8601):

git过滤器分支--env过滤器'
author_ts=“$(git show-q--format=“%at”“$git_COMMIT”)”
committer_ts=“$(git show-q--format=“%ct”“$git_COMMIT”)”
GIT_AUTHOR_DATE=“$(日期-d“@$AUTHOR_ts”+%Y-%m-%dT00:00:00+0000”)”
GIT_提交人_DATE=“$(日期-d”@$COMMITTER_ts”+%Y-%m-%dT00:00:00+0000”)”
”“全部
注意:时区信息不会出现在, 所以这可能会在将来打破。所以你也可以
TZ
环境变量来设置时区,但我不确定它的可移植性:

TZ=UTC git筛选器分支--环境筛选器'
author_ts=“$(git show-q--format=“%at”“$git_COMMIT”)”
committer_ts=“$(git show-q--format=“%ct”“$git_COMMIT”)”
GIT_AUTHOR_DATE=“$(日期-d”@$AUTHOR_ts”+%Y-%m-%dT00:00:00”)
GIT_提交人_DATE=“$(日期-d”@$COMMITTER_ts”+%Y-%m-%dT00:00:00”)”
”“全部

谢谢您提供的信息!不幸的是,它只改变了时区。时代本身仍然存在。编辑:对不起,我刚刚意识到你在代码上面提到了这一点。不客气:)。我也设法更改了时间,并将其添加到了答案中。谢谢,我尝试了这个工具。这是一个错误(它将应用不正确的时区和时间),而且我需要花费数小时来完成所有提交:/稍微干净一点,没有比赛条件:
UTC\u DAY\u BEGIN=$(TZ=0 date+%F)T00:00:00+0000;导出GIT\u提交人\u日期=$UTC\u日期\u开始;导出GIT\u AUTHOR\u DATE=$UTC\u DAY\u BEGIN
``@omiug为什么您认为这对任何“竞争条件”都有影响?非常罕见,但我的代码只获取一次日期,而您的代码获取两次。日期可能会在两次抓取之间发生变化。即使我认真对待这一点,这也不是竞争条件\。我的意思是,如果两次抓取之间的日期发生变化,两个变量都会不同。从这一点,任何人都可以推断(shell rc)脚本已经在00:00运行。我认为这不符合“删除时间,特别是时区信息”问题中所述的愿望。因此,虽然它非常罕见,但它是一个bug(与您是否调用它无关)。