2017-05-09 60 views
1

我有一個目前私有的GitHub存儲庫,它現在存在幾年了。在README.md文件中有一個許可證,這是不準確的。修復舊版Git提交中的許可證

現在我想把這個私人回購變成一個公共的回購,有固定的許可證。無論如何,所有舊的提交仍包含舊(錯誤)許可證。

我該如何解決這個問題?我的第一個想法是squash the repository to a single commit and destroy everything else,但也許有更好的方法來實現我想要的。

從另外一個問題可以看出,保持歷史並不重要,但OTOH它也不會受到傷害。

真正的傷害是舊的承諾與錯誤的許可證。

任何想法? PS:我想確保沒有人能夠得到一箇舊的提交,即使他們知道提交的ID也不是。所以,解決這個問題的時候也要注意更新遠程倉庫,比如GitHub。

+2

您可以使用'git filter-branch'來做到這一點,但不應該反映許可證從那個時間點改變了嗎?還是你追溯改變整個項目? –

+0

我正積極地爲整個項目進行更改,我不希望它與舊許可證一起公開使用(即使這僅適用於舊的源代碼狀態)。在公佈事情之前,我想要新的許可證。 –

+0

@NoufalIbrahim'git filter-branch'允許您編輯歷史記錄中的文件嗎?我認爲這只是刪除文件。我想這聽起來像是最好的辦法是壓縮提交併重新開始。 – Tom

回答

3

您可以使用filter-branch來做到這一點。首先編寫一個小腳本,爲給定的提交重寫樹。例如,以下內容僅在README.md文件存在時將something更改爲something else

if [ -f README.md ]; then 
    sed 's/something/something else/g' README.md > tmp 
    mv tmp README.md 
fi  

保存爲change.sh,然後運行以下

git filter-branch --tree-filter "/bin/bash $(pwd)/change.sh" HEAD 

這將改寫所有提交的HEAD回去。如果您犯了錯誤,您可以使用git reset返回到較早的樹,然後重試。