2017-05-09 17 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ファイルの場合は、somethingsomething 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を使用して元のツリーに戻り、やり直してください。

関連する問題