我正在將舊的CVS存儲庫轉換爲git,除非所有提交都是UTC,而不是每個作者的本地時區,否則它工作得很好。更改git歷史記錄中所有提交的時區
我想在每個作者的基礎上更改這些提交的時區,例如,來自一位作者的所有提交從+0000改爲+1000,而來自其他作者的提交保持不變。 (所以我可以爲每個作者執行一次這個過程。)
實際時間應該保持不變,所以當前02:00:00 +0000
的提交應該變爲12:00:00 +1000
。
這是可能的東西像git filter-branch
?
我正在將舊的CVS存儲庫轉換爲git,除非所有提交都是UTC,而不是每個作者的本地時區,否則它工作得很好。更改git歷史記錄中所有提交的時區
我想在每個作者的基礎上更改這些提交的時區,例如,來自一位作者的所有提交從+0000改爲+1000,而來自其他作者的提交保持不變。 (所以我可以爲每個作者執行一次這個過程。)
實際時間應該保持不變,所以當前02:00:00 +0000
的提交應該變爲12:00:00 +1000
。
這是可能的東西像git filter-branch
?
我來到了這一點,這似乎這樣的伎倆:
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_EMAIL" == "[email protected]" ]; then
export GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE | sed s/+0000/+1000/`
fi
if [ "$GIT_COMMITTER_EMAIL" == "[email protected]" ]; then
export GIT_COMMITTER_DATE=`echo $GIT_COMMITTER_DATE | sed s/+0000/+1000/`
fi'
這將改變從+0000
到+1000
時區作者[email protected]
。如果時區在給定提交中已經是別的東西,那麼它將保持不變。如果此人是作者而不是提交者(反之亦然),則只更新其角色的日期。
它不會像@MattJohnson指出的那樣處理由DST引起的UTC偏移量的變化,但是如果需要的話,您可以添加其他標準。
這是通過利用git的內部日期格式,它始終以秒爲單位測量,並且看起來像@12345 +0000
。此處的時區未使用(秒數總是以UTC表示),它允許您更改時區而不更改正在引用的有效時刻。在這裏更改UTC偏移僅影響日期的默認格式。
除了@Malvineous'回答:
如果它的好使用當前用戶的時區作爲參考,還可以使用Git做DST轉換。這對我來說是個訣竅,將所有提交的時區固定到當前時區,包括DST更改。
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_EMAIL" == "[email protected]" ]; then
GIT_AUTHOR_DATE=`echo $GIT_AUTHOR_DATE|sed -e "s/[+-][0-9]\{4\}//g"`
fi
if [ "$GIT_COMMITTER_EMAIL" == "[email protected]" ]; 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)沒有指定時,這是沒有必要有一個附加的線。因此,切斷時區就足夠了。
不知道這裏的「DST轉換」是什麼意思,但是當我在TZ = Europe/London的冬天跑它時,它將所有時間都轉換爲UTC(+0000),並沒有處理這個事實去年夏天倫敦正在使用英國夏令時的一些承諾。 (我一直在嘗試整理一個我從美國服務器上提交的存儲庫,該服務器設置爲美國時區,我寧願將我在本地的英國時間記錄在提交上。) –
不要忘記「時區!=偏移」(請參閱[時區標記wiki](http://stackoverflow.com/tags/timezone/info))。取決於DST,單個作者的偏移量可能會有所不同。 –
相關:http:// stackoverflow。com/a/23900181/634824 –