2009-10-29 172 views
2

我正在使用git-svn工具將一些Subversion存儲庫轉換爲Git。我注意到,即使它正確導入作者信息,提交者信息與作者信息不匹配(例如,提交者日期是我運行git-svn工具的日期/時間)。從SVN導入歷史記錄到Git - 更改提交者信息

有沒有辦法讓提交者信息與從Subversion導入的作者信息相匹配?如果沒有,我該如何使用git-filter-branch重寫提交來糾正這個問題(即,將每個提交的作者信息複製到提交者信息中)?

謝謝!

--- UPDATE ---

的Git,SVN是不是造成這個問題,我在這裏!我一直在重新規劃Subversion的歷史,這正在改變提交者的日期。那麼,是否有人如何使用git-filter-branch來改變它(即將每個提交的作者信息複製到提交者信息中)?

+0

FWIW,我也使用git-svn的,並沒有表現這種方式我。提交者和作者信息總是匹配。 – 2009-10-29 13:08:35

+0

我想清楚發生了什麼 - 我一直在重新設計SVN歷史,並且這正在改變提交者的日期。 – Jordan 2009-10-29 13:40:36

+0

由於它不是git-svn的問題,任何人都知道如何使用過濾器分支將作者信息複製到提交者信息字段中? – Jordan 2009-10-29 13:41:37

回答

1

您在尋找過濾分支的--env-filter模式。相關環境變量爲GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL,GIT_AUTHOR_DATE,GIT_COMMITTER_NAME,GIT_COMMITTER_EMAILGIT_COMMITTER_DATE

你的命令是這樣的:

git filter-branch --env-filter ' 
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" 
export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" 
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' -- --all 

--all規定,這應該對所有分支機構進行操作。你的原始參考將被保存在參考文獻/原始名稱空間中,以防你陷入困境。

當然,我不能發佈任何此類信息,但不會對任何人可能遇到的危險提出警告。從man git-filter-branch:

警告!重寫的歷史將爲所有對象具有不同的對象名稱,並且不會與原始分支會聚。您將無法輕鬆地將重寫的分支推送並分發到原始分支的頂部。如果您不知道全部含義,請不要使用此命令,並且如果簡單的單次提交就足以解決您的問題,請避免使用它。 (見的git-底墊(1)瞭解更多信息「恢復上游REBASE」部分想改寫歷史的出版。)

+0

這是正確的答案,但有一個小錯字:你不能把'='字符放在--env-filter之後;它必須是一個空間。除此之外,它完美的工作。謝謝! – Jordan 2009-10-30 12:15:44

+0

對不起 - 固定! – Cascabel 2009-10-30 16:57:17

相關問題