Mercurialでは「歴史は神聖である」ことを私は知っています。
しかし、パスワードなどを含む設定ファイルなど、誰かが誤ってすべきでないことをコミットしたとしましょう。誰かが気付く前にしばらく時間が経過したとしましょう。そのため、いくつかのコミットのためにぶらぶらしています。明らかに、検出者は機密データをリポジトリから削除します。
そのファイルまたは機密データをコミット履歴から永続的にスクラブする方法はありますか?それとも、その機密データは永遠にレポの永続的な部分になるのでしょうか?
Mercurialでは「歴史は神聖である」ことを私は知っています。
しかし、パスワードなどを含む設定ファイルなど、誰かが誤ってすべきでないことをコミットしたとしましょう。誰かが気付く前にしばらく時間が経過したとしましょう。そのため、いくつかのコミットのためにぶらぶらしています。明らかに、検出者は機密データをリポジトリから削除します。
そのファイルまたは機密データをコミット履歴から永続的にスクラブする方法はありますか?それとも、その機密データは永遠にレポの永続的な部分になるのでしょうか?
これを実現する方法はいくつかあります。それらはすべて、変更が導入された後にリポジトリのクローンを作成したり、リポジトリから変更セットをプルしたりしたすべての人の協力を必要とします。
どの方法を使用するかは、コミットされたデータの正確な性質と、データが履歴のどこにあるかによって異なります。それらはすべてMercurial拡張機能を使用する必要があり、コアMercurialでは実現できません。幸い、必要なすべての拡張機能はデフォルトでMercurialに同梱されており、単に有効にする必要があります。
ここでは、これが重複している質問にさまざまな方法を与えるいくつかの回答があるため、ここでは方法について詳しく説明しません。その質問で受け入れられた答えは技術的には正しいが、役に立たないことを明確にしたいと思います。それは実際に可能です。
このリポジトリが実際にエスケープされていない場合に限り、hg convert Hg Convert Extension docを使用して、プロセスで機密ファイルをフィルタリングしながら、基本的に新しいリポジトリにクローンを作成することで、履歴からファイルを削除できます。
一般に、パスワード付きのweb.configやiniファイルなど、クライアントに公開または配信する前にリポジトリを監査すると、何かが見つかります。
拡張機能はデフォルトでは有効になっていませんが、私が使用するすべてのクライアントに含まれています。Mercurialがconvertコマンドを認識する前に、拡張機能を有効にする必要があります。
Tortoise HgまたはKilnを使用している場合、例:
または、Mercurial.iniを直接編集します。
[extensions]
convert =
リポジトリの上のディレクトリに移動します(私の例では、私のリポジトリはHelloAppです)。
filemap.txtという名前のファイルを作成します
除外するファイル名へのフルパスを含む行を追加します。
exclude HelloApp/sensitive.config
コマンドプロンプトを開き、filemap.txtを含む同じディレクトリにcdして、hgconvertを実行します。
cd C:\projects
hg convert --filemap filemap.txt HelloApp HelloApp_clean
次に、最新の作業コピーを入手します。
cd HelloApp_clean
hg update
クリーンコピーを使用して、サーバー上に新しいクローンを作成する必要があります。
フックがどのように機能するかについての詳細は調査していないため、このアイデアが完全に機能しない可能性があります。機密ファイルのコミット、プッシュ、プルを禁止するフックを設定できる場合があります。コミットまたはプッシュする前に実行されるフックがあります(precommit and preoutgoing
)。フックが回避されないように保護することは、Mercurial:TheDefinitiveGuideでも説明されているもう1つの問題です。
いいえ、そうではありません。削除と再クローンのアクセス権を持っていたすべての人を納得させることができれば、将来のアクセスからファイルを削除できます。
しかし、たとえば、rootパスワードをパブリックBitbucketリポジトリにプッシュした場合-?変更する必要があります。あなたの情報は現在公開されており、漏洩しているため、そのように見なす必要があります。ごめん。