我想删除在存储库中创建的所有提交的时间,尤其是时区信息。那可能吗?如果不是,是否可以简单地将时间00:00和时区设置为+0000?
(顺便说一句,我想保留日期。这只是我不想要的时间和时区。)
我只发现了关于更改所有提交的作者的问题,但没有发现关于仅更改所有提交中的属性以保留剩余信息的问题。
是的,我知道人们可以通过其他方式找到我住的地方等,但这对我来说已经足够了。
您不能“不存储时间”,但您始终可以将时间设置为 00:00,将 TZ 设置为 +0000。
对于新的提交,最直接的方法是设置GIT_COMMITTER_DATE和GIT_AUTHOR_DATE环境变量。例如在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"
Run Code Online (Sandbox Code Playgroud)
你要确保在每天第一次提交之前这样做;也许通过将它添加到您的登录脚本或其他东西。
你的措辞表明你可能也有提交的历史。这些也可以更改,例如通过git filter-branch与env-filter选项一起使用。有关其工作原理的详细信息,请参阅https://git-scm.com/docs/git-filter-branch 上的filter-branch文档。
但是,重要的是要了解这是历史重写 - 即您将用新提交替换所有现有提交,并且如果其他人共享此存储库,它将使它们处于需要恢复的损坏状态。(请参阅 git rebase 文档中的“从上游 rebase 恢复”以了解将涉及的内容。)实际上没有办法解决这个问题 - 提交和作者日期是每次提交的一个组成部分。
警告:编辑提交的任何信息都会更改其哈希值,从而更改所有后代提交的哈希值, 如果其他人已经获取了相关提交,则可能会导致“重写”历史记录。
如前所述,git filter-branch可用于一次重写多个提交。
仅编辑时间戳可以使用其 环境过滤器来完成:
如果您只需要修改执行提交的环境,则可以使用此过滤器。具体来说,您可能想要重写作者/提交者姓名/电子邮件/时间环境变量(有关详细信息,请参阅 git-commit-tree )。
具体来说,可以
使用 git内部日期格式的GIT_AUTHOR_DATE值设置和环境变量:GIT_COMMITTER_DATE
它是 <unix timestamp> <时区偏移>,其中 <unix timestamp> 是自 UNIX 纪元以来的秒数。<时区偏移> 是相对于 UTC 的正偏移或负偏移。例如,CET(比 UTC 早 1 小时)为 +0100。
警告:以下代码示例立即重写整个树。
它们可以直接在env-filter中简单地更改。
我想删除存储库中创建的所有提交的时间,尤其是时区信息。
要仅删除时区信息,只需将日期变量设置为$timestamp +0000:
git filter-branch --env-filter '
GIT_AUTHOR_DATE="$(git show -q --format="%at" "$GIT_COMMIT") +0000"
GIT_COMMITTER_DATE="$(git show -q --format="%ct" "$GIT_COMMIT") +0000"
' -- --all
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,我想保留日期。这只是我不想要的时间和时区。)
要删除time和timezone,有点棘手(使用 ISO 8601格式):
git filter-branch --env-filter '
author_ts="$(git show -q --format="%at" "$GIT_COMMIT")"
committer_ts="$(git show -q --format="%ct" "$GIT_COMMIT")"
GIT_AUTHOR_DATE="$(date -d "@$author_ts" +"%Y-%m-%dT00:00:00 +0000")"
GIT_COMMITTER_DATE="$(date -d "@$committer_ts" +"%Y-%m-%dT00:00:00 +0000")"
' -- --all
Run Code Online (Sandbox Code Playgroud)
注意:时区信息不会出现在格式示例中,因此将来可能会中断。因此,也可以使用 TZ
环境变量来设置时区,但我不确定它的可移植性如何:
TZ=UTC git filter-branch --env-filter '
author_ts="$(git show -q --format="%at" "$GIT_COMMIT")"
committer_ts="$(git show -q --format="%ct" "$GIT_COMMIT")"
GIT_AUTHOR_DATE="$(date -d "@$author_ts" +"%Y-%m-%dT00:00:00")"
GIT_COMMITTER_DATE="$(date -d "@$committer_ts" +"%Y-%m-%dT00:00:00")"
' -- --all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |