00:00
,时区设置为+0000
?(我的意思是只保留日期。我只是不想要时间和时区。)
我只找到了一些关于更改所有提交者的问题,但没有关于仅更改所有提交的属性并保留其余信息的内容。
是的,我知道人们还有其他方法可以找到我住在哪里等信息,但对我来说这已经足够了。
00:00
,时区设置为+0000
?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
选项。 有关此操作的详细信息,请参见filter-branch文档。
但是,重要的是要了解这是一个历史记录重写 - 即,您将用新的提交替换所有现有提交,如果其他人共享此存储库,则会将它们放入需要进行某些恢复的错误状态。(请参阅git rebase文档中的“从上游rebase恢复”以了解所涉及的内容)。 实际上没有办法避免这个问题 - 提交和作者日期是每个提交的组成部分。
警告:编辑提交的任何信息都会更改其哈希值,因此也会更改所有后代提交的哈希值,这可能会导致"重写"历史,如果其他人已经获取了相关提交。
具体而言,可以使用 git 内部日期格式 中的值设置如果您只需要修改提交时执行的环境,那么可以使用此过滤器。具体来说,您可能希望重写作者/提交者的名称/电子邮件/时间环境变量(有关详细信息,请参见 git-commit-tree )。
GIT_AUTHOR_DATE
和 GIT_COMMITTER_DATE
环境变量:
这里的时间格式为<unix timestamp> <time zone offset>,其中<unix timestamp>是自UNIX纪元以来经过的秒数。<time zone offset>是相对于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
(我希望保留日期,只是不需要时间和时区。)
要同时移除时间和时区,需要使用 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
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
我从来没有使用过这个,但是这里有人创建了一个插件来管理这种情况。你可以在这里访问代码:https://github.com/bitriddler/git-change-date