簡體   English   中英

如何從`git log --all --format =“%aN <%ae>`輸出中刪除我的私人電子郵件?

[英]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.shgar.sh )添加到repo.git目錄,將OLD_EMAILCORRECT_NAMECORRECT_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM