問題タブ [keyword-expansion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 機密情報を共有せずに github からプッシュおよびプルする方法は? 汚れ&きれい?
github からサーバー リポジトリにプルするときに、特定のファイル (config.php など) のローカライズされた機密情報を上書きしないようにしたいと考えています。
注: オープンソース タイプのリポジトリではありません。私はリポジトリを完全に制御できます。私は唯一のユーザーであり、非公開ですが、重要なことに、構成ファイルの構造を変更する可能性のあるオープンソース フレームワークに基づいています。そこからテスト、ステージング、および本番にプルできるようにしたいだけで、誤って本番環境の構成がテストなどにならないようにしたいのですが、構成ファイルを再コーディングして、他の場所からデータをプルすることはできません。フレームワークが更新された場合、後で厳しいマージ状況になります。
理想的には、プルするとき、REPO_URI からのフェッチ中に、FILE_PATH の 24 行目にある現在の情報を変更する可能性のあるハンクを常に破棄するように Git に指示できるようにしたいと考えています。ただし、それは不可能だと思います(間違っている場合は修正してください)。
ただし、誰かが上記の方法を提供できない場合は、以下の解決策を読んで、それが理想的な方法であるかどうかをお知らせください。
git のユーザー ガイド here で説明されているように、キーワード拡張を使用します。以下に、これを行う方法を説明し、最後に、このアプローチについていくつか質問します。
方法の説明
最初に、パスワード、ユーザー名、データベース パスなどの特定の機密情報で特定のダミー キーワード (github リポジトリ マスターにある) を交換する、「sensitive_values_inserter」と「sensitive_values_remover」という 2 つのスクリプトを作成します。
等
次に、このスクリプトの 3 つのバージョン (テスト/ステージング/運用) ごとに 1 つのバージョンを作成します。各バージョンには、ダミー値の代わりに、それが属する環境に関連する特定のパスワード、ユーザー名、およびデータベース パスが含まれます。これらのスクリプトのそれぞれを、次のように、これらのコード リポジトリのそれぞれに対する相対パスに配置します。
これらの各フィルターには、関連するセットアップの特定の値があります。
次に、レポの構成全体が次のように変更されます。
最後に、サーバー リポジトリで次の操作を行います。
そうすれば、メインサーバーからプルするたびに、これを正しく理解していれば、これらのフィルターは「ダミー」の値を使用したい値に置き換えます。
注:この他のスタックオーバーフローの質問で指摘されているように、これを機能させるには、上記のようにすべてを設定した後、次のことを行う必要があります。
チェックアウトと stash pop の間に、クリーン操作が行われたファイルへのすべての変更をコミットする必要がありました。心配しないでください。それらをコミットした後、作業ディレクトリ内のものは汚されます。(ちょっと直感に反しますが、うまくいきます。)
github に正常にプッシュでき、クリーンな値のみが表示されます。
(ブランチごとに 1 つの .gitignore を使用し、ブランチごとに 2 つのドライバーと 2 つのフィルターを使用する、これらの線に沿った代替のより高度な手法があります。これにより、テスト ブランチに切り替えるときにライブ パスワードを消去できます。また、その逆も可能です。秘訣は、各ブランチの .gitignore で両方のブランチのクリーナーを呼び出すことですが、.gitignore のホームであるブランチのスマッジャーのみを呼び出すことで、それ自体のパスワードを復元します。 github ではすべての機密情報がクリーンアップされたままになっているので、これは素晴らしいことです。
この方法と代替案に関する質問
これをテストしましたが、動作します。しかし...
git を使用してこれを行うより良い方法はありますか? 特定の構成値を保持しながらこれらのファイルへの変更をプルできるようにしたいので、機密情報が含まれているファイルを単に無視するオプションではなく、マージ時にそれらへの変更を無視するオプションではないことを付け加えるかもしれません。 . git update-index --assume-unchanged FILENAME
そのため、ファイル全体に対する将来のローカル変更を永続的に無視するために、単純に使用したくありません。
ありがとう。