質問: 現在、Gitで実装中のソフトを複数環境で運用したいと考えております。その際、環境毎にデータの保存先や参照するパスの情報が変わって来るので、Gitの管理対象からは外して運用したいと考えています。 この場合、.gitignoreにそのファイルを加えてしまうと、ファイル自体が消えてしまったのですが、今までのコミットの情報は残しつつ、今後のGitの管理からはそのファイルを管理対象から外すという事は出来ないのでしょうか?
回答: > > 今までのコミットの情報は残しつつ、今後のGitの管理からはそのファイルを管理対象から外すという事は出来ないのでしょうか? > > > `git rm --cached FILE` コミットすると、リポジトリの中の 設定ファイルを消すことになります。 開発者がコミットしつつ 設定変更する用途には利用できません。 `git update-index --assume-unchanged [ファイル名]` `git update-index --skip-worktree [ファイル名]` どちらも 開発者が 自分の修正を間違ってコミットしないように 変更の追跡を逃れる目的で利用します。 開発者が 各自の作業ディレクトリで このコマンドを実施する必要があります。 中央のリポジトリで 設定ファイルが変更された場合、その設定を 自分の環境に上書きするか? 無視するかの違いによって この2つのコマンドを使い分けます。 の案がありますが、おそらく どちらも 目的通りには動作しないと思います。 git 初心者が 開発者の中にいると間違ってコミットする・・という事が良くおきます。 ### 根本的な解決 環境定義を読み込む部分で、複数のファイルから値を読み込むような工夫が必要だと思います。 1)すべての環境で共通の設定が入った物:ソース管理する。 2)開発時の設定によって設定が変わる物:開発版、リリース版で違う定義にする。ソース管理する。 3)個人の開発環境によって設定が違うもの:ひな形だけソース管理する。 各個人は ソース管理外のフォルダにおいて自由に変更して利用する。 これらの設定をアプリが読み込むようにアプリ側で工夫をします。 `dotnet Core` であれば ユーザーシークレット と言って 環境に依存する設定は 複数の設定ファイルや、環境変数から読み込んでその値を利用するようになっています。 `.NET Framework` の場合にはビルド時に app.config web.config ファイルを リリース用、開発用に 分けてビルドできます。 開発用の時に 外部の user.config ファイルを ソース管理外のフォルダにおいて その値を参照する事ができます。 今までの失敗した経験上 git の設定では 限界があると思います。 間違ってコミットしたり、リリースした時に設定ファイルを上書きしたり・・。 お使いの言語で 複数の環境から値を取得して開発するような仕組みが用意されていないか 確認する事をお勧めします。