[英]How to convert git log --pretty=format:%aN,%ae in a specific format?
[英]How can I remove my private email from the `git log --all --format="%aN <%ae>` output?
我正在閱讀這篇文章: https : //help.github.com/articles/changing-author-info/ 。
請注意文章頂部的警告:“警告:此操作對存儲庫的歷史記錄具有破壞性。如果您正在與其他人協作存儲庫,則重寫已發布的歷史記錄被認為是不好的做法。您應該只在緊急情況下執行此操作“。 “遺憾的是,似乎沒有辦法重寫歷史記錄,只能重寫電子郵件和/或作者姓名。 感謝GitHub為未經請求的電子郵件提供矢量,但卻無法改變這一點! 似乎下一個最佳選擇是更改電子郵件,通知重要聯系人,以及不啟用從舊電子郵件轉發到新電子郵件。 如果您選擇使用此選項,那么您可能還希望僅對聯系人中的人啟用自動回復(Gmail中提供的功能,不確定其他電子郵件提供商),例如:
由於收到太多電子郵件,包括許多未經請求的電子郵件,我已經更改了我的電子郵件地址,不再主動監控此電子郵件地址。 如果您希望就我可能感興趣的內容與我聯系,請通過<插入一些通訊媒介與我聯系,例如您網站頁面上的聯系表格,社交媒體鏈接或您的https:// about.me page>
我將重現這里的步驟:
跑:
# It is simplest if you use a repo that you have
# already contributed to.
git clone --bare https://github.com/user/repo.git
cd repo.git
使用以下腳本將文件(稱為git-author-rewrite.sh
或gar.sh
)添加到repo.git
目錄,將OLD_EMAIL
, CORRECT_NAME
和CORRECT_EMAIL
替換為適當的值:
#!/bin/sh
# gar is short for git-author-rewrite
git filter-branch -f --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --exclude="refs/original" --all
# originally this had `-- --branches --tags`, but has been revised as
# per the answer below, and a -f also added.
為腳本添加exec權限: chmod +x gar.sh
運行腳本: ./gar.sh
運行腳本並使用git log --all --format="%aN <%ae>" | sort -u
檢查所有分支中的歷史git log --all --format="%aN <%ae>" | sort -u
git log --all --format="%aN <%ae>" | sort -u
它仍然顯示我的私人電子郵件地址。 我收到了垃圾郵件(在某些情況下,人們甚至提到“我注意到你為X repo做出了貢獻”),並且一直小心避免公開列出我的電子郵件(除了提交歷史記錄,直到我改為不使用我的電子郵件) GitHub上的私人電子郵件 )。 所以我需要在所有分支中運行此腳本。 但是,如果刪除了--all
選項,則我的私人電子郵件已從輸出中刪除。
腳本的輸出包括一些“警告:參考refs/heads/some_branch
不變”行雖然有許多“ refs/heads/some_branch
/ heads / some-branch-name'被重寫”。
如何從git log --all --format="%aN <%ae>" | sort -u
刪除我的私人電子郵件git log --all --format="%aN <%ae>" | sort -u
git log --all --format="%aN <%ae>" | sort -u
輸出? 編輯:使用git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u
git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u
第一個答案的建議git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u
。
我不知道為什么,但是你需要運行兩次腳本,因為在運行腳本之后運行上面的log命令后,它仍會輸出我的私人電子郵件。 我猜第二次運行會覆蓋備份,而log命令沒有正確排除所有備份。
TODO:嘗試git log --exclude="refs/original/*" --all --format="%aN <%ae>" | sort -u
git log --exclude="refs/original/*" --all --format="%aN <%ae>" | sort -u
編輯:將更改推送到原始遠程(甚至是上游)后,它正在更改文件,我不知道為什么,也不知道如何修復它。
我還向GitHub發送了反饋意見,並會在回復時更新。 但是,也許有人可以幫助我。
嘗試使用相同的git filter-branch命令-- --all
:它將處理分支和標記,但也會調用引用。
然后檢查你的git log --all
的結果git log --all
還要注意,使用過濾器分支,原始引用(如果與重寫的不同)將存儲在命名空間refs/original/
:確保您的git log --all
不列出那些引用( refs/original
):仍然會引用您的舊電子郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.