GitプロジェクトをGitHubに配置したいのですが、機密データ(capistranoの/config/deploy.rbなどのユーザー名とパスワード)を含む特定のファイルが含まれています。
これらのファイル名を.gitignoreに追加できることはわかっていますが、Git内の履歴は削除されません。
また、/。gitディレクトリを削除して最初からやり直したくありません。
Git履歴内の特定のファイルのすべての痕跡を削除する方法はありますか?
すべての実用的な目的のために、あなたが最初に心配しなければならないことはあなたのパスワードを変えることです!あなたの質問から、あなたのgitリポジトリが完全にローカルであるかどうか、またはあなたがまだ他の場所にリモートリポジトリを持っているかどうかは明らかではありません。リモートで他のユーザーから保護されていない場合は、問題が発生します。これを修正する前に誰かがそのリポジトリのクローンを作成した場合、その人はローカルマシンにパスワードのコピーを持っているので、履歴から削除された「修正済み」バージョンに更新するように強制することはできません。あなたができる唯一の安全なことはあなたがそれを使ったどこでもあなたのパスワードを何か他のものに変えることです。
それが邪魔にならないように、これを修正する方法は次のとおりです。GitHubはFAQとしてその質問に正確に答えました:
Windowsユーザーへの注意:このコマンドでは、一重引用符ではなく二重引用符( ")を使用してください
git filter-branch --index-filter \
'git update-index --remove PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
2019年の更新:
これはFAQからの現在のコードです:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force
このコードをGitHubなどのリモートリポジトリにプッシュし、他の人がそのリモートリポジトリのクローンを作成すると、履歴を書き換える状況になっていることに注意してください。この後、他のユーザーが最新の変更をプルダウンしようとすると、早送りではないため、変更を適用できないことを示すメッセージが表示されます。
これを修正するには、既存のリポジトリを削除して再クローン化するか、git-rebaseのマンページにある「UPSTREAMREBASEからの回復」の手順に従う必要があります。
ヒント:実行git rebase --interactive
将来、機密情報で誤って変更をコミットしたが、リモートリポジトリにプッシュする前に気付いた場合は、より簡単な修正がいくつかあります。最後のコミットが機密情報を追加するものである場合は、機密情報を削除してから、次のコマンドを実行できます。
git commit -a --amend
これにより、git rm
。を使用して行われたファイル全体の削除など、行った新しい変更で以前のコミットが修正されます。変更がさらに履歴に戻っても、リモートリポジトリにプッシュされない場合は、インタラクティブなリベースを実行できます。
git rebase -i origin/master
これにより、リモートリポジトリとの最後の共通の祖先以降に行ったコミットでエディタが開きます。機密情報を含むコミットを表す行で「pick」を「edit」に変更し、保存して終了します。Gitは変更をウォークスルーし、次のことができる場所にあなたを残します。
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
機密情報による変更ごと。最終的にはブランチに戻り、新しい変更を安全にプッシュできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加