質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

【git】リポジトリにすでに存在するファイルを残し、gitignoreに追加する方法

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 171

rrrtktk

score 1

前提・実現したいこと

VisualStudioを使い開発を行っています。すでに数名のメンバーで開発中です。

開発中によく書き換えが起こる、ローカルの環境設定を記述しているファイルがあるのですが、
これを、リポジトリには「デフォルト設定」のファイルをあげた後に、
これ以上書き換えられないよう.gitignoreに追加しようとしています。
(あとからmasterブランチをpullしてきた際に、ファイルそのものは存在するようにしておきたい)

もし上記のように「存在させておく」ことが不可能だとしても、
せめて「すでに存在している分を削除せずにgitignoreに追加」をしたいです。

発生している問題・エラーメッセージ

あとから追加した場合にはキャッシュの削除が必要とのことでしたので、
いくつかの記事を参考にしながら、以下の手順を踏んだのですが、
ブランチ移動などを行うとキャッシュのみならずファイル自体が削除されてしまいます。

(参考にしたサイトの一例:
https://codeaid.jp/blog/gitignore/
https://qiita.com/fuwamaki/items/3ed021163e50beab7154)

①対象となるファイルをまずデフォルト用に更新し、add、commit
②.gitignoreファイルに対象ファイルを追加し、add、commit
③キャッシュの削除のために、対象ファイルのキャッシュのみを削除
git rm -r --cached [ファイル名]
④この状態で、対象ファイルが削除されることもなく、対象ファイルの差分が対象外になっていることを確認
⑤上記キャッシュ削除の変更もadd、commit
⑥この状態で別のブランチへcheckoutしてから戻ってくると、対象ファイルごと消えている

試したこと

キャッシュ削除の部分が問題だろうと思い、
ファイルだけでなく全部削除して全部addする方法を試したり、
他のブランチにマージしてみるなどを試したのですが、やはりファイルごと削除されてしまいました。

うろ覚えで申し訳ないのですが、
過去に.gitignoreにあるファイルをチーム内で共有し、バージョン管理は行わないような運用をした覚えがあるのでできないことはないと思っているのですが…。
なぜ今回ブランチ移動のたびに削除されてしまうのかが分からず困っています。
お力添えをお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/08 10:10

    回答ありがとうございます。個人レベルでしたらこちらで問題なさそうなのですが、開発しているメンバー全体で一括で行えたらな…と。
    もしgitignoreで不可能であれば、こちら参考にさせていただきます。ありがとうございます。

    キャンセル

+1

なぜ今回ブランチ移動のたびに削除されてしまうのかが分からず困っています。

手順 5 の操作が add → commit でなく commit のみであれば、
対象のファイルが Git 管理から外されたため、
操作を行ったブランチを checkout すると、操作を行ったファイルは
ワーキングツリーからなくなります

Git では基本的にファイルをこれ以上書き換えられないようにはできない前提で扱います

参考: github - Is there a way to lock individual files or directories on fork when using git? - Stack Overflow

.gitignore はこれ以上書き換えられないようにするための設定ではなく、
Git 管理されていないファイルを Git 管理に含めないための設定です

たとえば、開発環境用の環境変数設定 .env のテンプレートファイルであれば、
.env.dist などという名前でリポジトリーにコミットしておき、
開発環境構築時にファイルをコピーして設定を行う手順にしておくなどの方法があります

手順 3 の操作について

手順 3 の操作は対象のファイルを Git 管理から外す操作です

手順 5 の操作について

また、手順 5 の操作を commit ではなく add → commit として行うと、
Git 管理から外したファイルが再び Git 管理に含められてしまいます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/08 11:08

    >「削除した」という情報そのものもgitでの変更対象とされてしまいます。

    なるほど、少しずつ分かってきた気がします。ありがとうございます。
    現状では存在するファイルをあとからgitignoreに追加し、最初からあるgitignoreと同じような扱いをするのは難しそうなのですね…。

    削除した情報についてなのですが、
    こちらはあえて「--cached」を付けて「ファイルの削除」ではなく「ファイルのキャッシュを削除」にしているにもかかわらず、
    ブランチに戻ってきた際の挙動として「ファイルが削除」になってしまうのはなぜなのでしょうか…?
    ブランチ移動をせずコマンドを打った直後は「キャッシュのみ」になっているのに、ブランチ移動の時のみそうなるという仕組みがまだあまり分かっていません…。

    キャンセル

  • 2020/07/08 11:12

    > ブランチ移動をせずコマンドを打った直後は「キャッシュのみ」になっているのに、ブランチ移動の時のみそうなるという仕組みがまだあまり分かっていません…。

    切り替える対象に「当該ファイルを削除した」というコミットが入っているので、それに従って削除が行われます。

    キャンセル

  • 2020/07/08 11:35

    そこでは「キャッシュのみ」というのは認識されず、ただのファイル削除になってしまう、ということなんですかね。
    色々と教えていただきありがとうございます。
    gitの勉強はあまりしたことがありませんですが奥が深いですね。知識不足を痛感しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る