[英]Change timezone for all commits in git history
我正在將舊的CVS存儲庫轉換為git,除了所有提交都是UTC而不是每個作者的本地時區之外,它已經很好地工作了。
我想基於每個作者更改這些提交的時區,因此例如來自一個作者的所有提交從+0000變為+1000,而來自其他作者的提交不變。 (所以我可以為每位作者執行一次此程序。)
實際時刻應該保持不變,因此當前02:00:00 +0000
的提交應該變為12:00:00 +1000
。
這可能與git filter-branch
嗎?
除了@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)。 因此,切割時區就足夠了。
我想出了這個,似乎可以解決這個問題:
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偏移僅影響日期的默認格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.