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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

2回答

3845閲覧

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

rrrtktk

総合スコア1

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

0クリップ

投稿2020/07/07 10:28

編集2020/07/08 01:19

前提・実現したいこと

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

手順 5 の操作が addcommit でなく 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 ではなく addcommit として行うと、
Git 管理から外したファイルが再び Git 管理に含められてしまいます

投稿2020/07/07 12:12

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rrrtktk

2020/07/08 01:12 編集

ご回答ありがとうございます。疑問点があり、よろしければこちらもお教えいただけると大変助かります。 >Git では基本的にファイルをこれ以上書き換えられないようにはできない前提で扱います ということは、今回私の実現したいこと(既存のファイルを残したままgit addしたりする対象からのみ外す)は、本来は不適切ということになりますでしょうか。 >たとえば、開発環境用の環境変数設定 .env のテンプレートファイルであれば、 .env.dist などという名前でリポジトリーにコミットしておき、 開発環境構築時にファイルをコピーして設定を行う手順にしておくなどの方法があります 例えで上げていただいた上記ですが、 .env ファイルがGit管理に含まれないようにしてある場合、毎回checkoutなどのたびに.envファイルが削除され、新たなブランチで開発するたびに各.env.dist ファイルからコピーして作成を何度も繰り返すしかない…というような運用をしてらっしゃいますか? 基本的なことかもしれず大変恐縮ですが、チームでの開発経験が浅く、すみませんが教えていただけると幸いです。
maisumakun

2020/07/08 01:20

> 毎回checkoutなどのたびに.envファイルが削除され、新たなブランチで開発するたびに各.env.dist ファイルからコピーして作成を何度も繰り返すしかない…というような運用をしてらっしゃいますか? そのときこそ.gitignoreの出番です。.envを.gitignoreに書いておけば、ブランチを切り替えても同じファイルが残り続けます。
rrrtktk

2020/07/08 01:54 編集

書き方が分かりづらかったようで申し訳ないのですが、 >そのときこそ.gitignoreの出番です。.envを.gitignoreに書いておけば、ブランチを切り替えても同じファイルが残り続けます。 これを実現したくgitignoreに書いているのに、checkoutのたびに削除されてしまうのです、というのが今回の質問です。 この例でいうと、 「すでにgit管理下に.envファイルを含めてしまっていて、あとからこれをgitignoreに追加しようとしている。 gitignoreファイルに追記はしたが、すでに管理下にあるので、 キャッシュのみの削除コマンドらしい(git rm -r --cached)を行い、commitしてみた。 すると直後はうまく動くようだが、 checkoutし別のブランチへ移動し、また戻ってくると、キャッシュだけでなく.envファイルごと消えるという状況になる」 という感じです。
maisumakun

2020/07/08 01:54

はい、「すでにgit管理下にある」ファイルを削除したので、「削除した」という情報そのものもgitでの変更対象とされてしまいます。 ファイルが存在する前からgitignoreしていた場合(この場合、そのファイルに関してはgitは何ら変更しない)とは話が全く違います。
rrrtktk

2020/07/08 02:08

>「削除した」という情報そのものもgitでの変更対象とされてしまいます。 なるほど、少しずつ分かってきた気がします。ありがとうございます。 現状では存在するファイルをあとからgitignoreに追加し、最初からあるgitignoreと同じような扱いをするのは難しそうなのですね…。 削除した情報についてなのですが、 こちらはあえて「--cached」を付けて「ファイルの削除」ではなく「ファイルのキャッシュを削除」にしているにもかかわらず、 ブランチに戻ってきた際の挙動として「ファイルが削除」になってしまうのはなぜなのでしょうか…? ブランチ移動をせずコマンドを打った直後は「キャッシュのみ」になっているのに、ブランチ移動の時のみそうなるという仕組みがまだあまり分かっていません…。
maisumakun

2020/07/08 02:12

> ブランチ移動をせずコマンドを打った直後は「キャッシュのみ」になっているのに、ブランチ移動の時のみそうなるという仕組みがまだあまり分かっていません…。 切り替える対象に「当該ファイルを削除した」というコミットが入っているので、それに従って削除が行われます。
rrrtktk

2020/07/08 02:35

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

0

投稿2020/07/07 11:37

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rrrtktk

2020/07/08 01:10

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問