是否混帳提供一種方式來自動改寫基於在.mailmap
文件中指定的替代一個Git倉庫歷史的歷史(見git help shortlog
瞭解詳細信息)?重寫提交歷史根據.mailmap文件
cd repository.git
somecommand /path/to/.mailmap # <-- ???
是否混帳提供一種方式來自動改寫基於在.mailmap
文件中指定的替代一個Git倉庫歷史的歷史(見git help shortlog
瞭解詳細信息)?重寫提交歷史根據.mailmap文件
cd repository.git
somecommand /path/to/.mailmap # <-- ???
這裏沒有簡短的git命令。人們需要使用git filter-branch --commit-filter <command> [...]
其中<command>
改變使用git check-mailmap
與-c mailmap.file=/path/to/.mailmap
或-c mailmap.blob=SOMEREV:path/to/.mailmap
,例如使用來自主分支.mailmap
文件GIT_AUTHOR_NAME
,GIT_AUTHOR_EMAIL
,GIT_COMMITTER_NAME
和GIT_COMMITTER_EMAIL
變量,可以使用
git filter-branch --commit-filter '
R=`echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" | git -c mailmap.blob=master:.mailmap check-mailmap --stdin`
GIT_AUTHOR_NAME="${R% <*@*>}"
R="${R##* <}"
GIT_AUTHOR_EMAIL="${R%>}"
R=`echo "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" | git -c mailmap.blob=master:.mailmap check-mailmap --stdin`
GIT_COMMITTER_NAME="${R% <*@*>}"
R="${R##* <}"
GIT_COMMITTER_EMAIL="${R%>}"
git commit-tree "[email protected]"
' HEAD
這當然應該從事的帶有POSIX外殼的系統。
請注意,這不會在提交消息中重寫任何Signed-off-by:
或類似的行。
我很難做到這一點,因爲我沒有意識到'.mailmap'文件不在我的歷史中。添加它作爲最後一次提交也不起作用。查看git-config的文檔,我還會發現'mailmap.file',我可以指向倉庫之外的文件。 我用'--commit-filter'代替'--env-filter',並用環境變量所需的'export'命令替換了'git commit-tree'命令。 – BooK 2016-08-11 08:53:07
請注意,如果您有註釋標籤,則「--tag-name-filter」的文檔將顯示:「也不支持更改作者或時間戳記(或有關該標籤的消息)。」我認爲這意味着你需要用'git tag'命令來重寫這些標籤。 – BooK 2016-08-11 09:04:52
通過將您在此處引用的腳本編寫爲'somecommand'。我們無法猜測您期望它做什麼......我們中的一些人可能甚至不熟悉「.mailmap」文件是什麼,或者它可能包含什麼...... – twalberg 2014-12-03 17:00:46
git'.mailmap'的格式文件記錄在'man 1 git-shortlog'中。改說我的問題。 – jotik 2014-12-03 21:33:47