14

オープンソースにしたいGitでバージョン管理されたプロジェクトがありますが、元々使用されていた環境に固有の個人情報が含まれています。問題の情報を変更して、リポジトリに含まれていない構成ファイルからロードします。そもそもこれを行うべきだったと思いますが、個人情報は以前のコミットにまだ存在しているので、どうすれば履歴から削除できますか?最新のコミットに基づいて新しいリポジトリを開始し、すべての履歴を失う必要がありますか、それとも個人情報の記録を削除しながら現在のリポジトリを回収する方法はありますか?

編集:明確にするために、この個人情報を含むファイルはまだ使用されているため、完全に削除したくありません。むしろ、それらの中にある特定の文字列の出現を削除/空白にする/変更したいと思います。

4

2 に答える 2

5

Gitリポジトリからプライベートデータを削除するために特別に設計された、よりシンプルで高速な代替手段であるBFGRepo-Cleanerを使用することをお勧めします。git-filter-branch

使用方法の説明には手順の詳細が記載されていますが、コアビットは次のとおりです。BFGのjarをダウンロードし(Java 6以降が必要)、次のコマンドを実行します。

$ java -jar bfg.jar  --replace-text replacements.txt  my-repo.git

ファイルには、replacements.txt実行するすべての置換が次のような形式で含まれている必要があります(1行に1つのエントリ-コメントは含めないでください)。

PASSWORD1 # Replace literal string 'PASSWORD1' with '***REMOVED***' (default)
PASSWORD2==>examplePass         # replace with 'examplePass' instead
PASSWORD3==>                    # replace with the empty string
regex:password=\w+==>password=  # Replace, using a regex

リポジトリ履歴全体がスキャンされ、すべての非バイナリファイル(サイズが1MB未満)で置換が実行されます。一致する文字列(最新のコミットに含まれていないもの)が置き換えられます。

完全な開示:私はBFGレポクリーナーの作者です。

于 2013-03-31T14:54:21.513 に答える
2

少し前にこのためのスクリプトを書きました。あなたはここでそれを見つけることができます:https ://gist.github.com/dound/76ea685c05c4a7895247457eb676fe69

(archive.orgから表示可能な元の記事: https ://web.archive.org/web/20160208235904/http ://dound.com:80/2009/04 / git-forever-remove-files-or-folders-from -履歴/

このスクリプトは、 gitに付属しているgit-filter-branchツールに基づいています。興味がある場合は、ここでgitリポジトリからファイルを削除する方法について詳しく読むことができますが、上記のリンクからスクリプトを使用するのは簡単で、その個人情報を削除するために本当に必要なことはすべてあります。

于 2010-02-08T22:59:03.377 に答える