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

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

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

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

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

2回答

3202閲覧

ローカルリポジトリに存在しないファイルがgit diffで表示されてしまう

Jake5

総合スコア32

Git

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

マージ

複数のデータベースやファイル、プログラムなどを決まった手順や規則に従って一つに結合すること。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

3クリップ

投稿2021/04/04 10:34

編集2021/04/05 07:23

表題の通り、ローカルリポジトリに存在しないファイルがgit diffで表示されてしまいます。

以下のようなブランチモデルで

* develop * feature/A

それぞれのローカルブランチに、同一フォルダ・ファイルが配置されているのにもかかわらず、

develop

1ls -a 2./ ../ .git/ test.txt test2.txt

featureA

1ls -a 2./ ../ .git/ test.txt test2.txt

git diff --stat develop feature/Aで差分を見ると関係のない差分が表示されてしまいます。

.github/workflows/{deploy2.yml => deploy1.yml} | 8 ++++----

ちなみに、feature/Adevelopにマージすると、コンフリクトして関係のないフォルダ(.github)が復活してしまいます。

$ git checkout develop $ git merge feature/A $ ls -a ./ ../ .git/ .github/←なぜか追加される test.txt test2.txt

■補足情報
.githubフォルダはリモートリポジトリで管理しており、sparse-checkoutの設定によりローカルリポジトリにpullできないようにしております。

/* !.github/

こちらの原因がわかる方がいらっしゃいましたら、ご教示いただけますと幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/04/04 15:02

git diff --stat develop feature/A は、どこのディレクトリで実施していますでしょうか?
Jake5

2021/04/05 00:18

ご質問ありがとうございます。 こちら、ローカルのdevelopブランチ及びfeatureブランチで実施しております。どちらも同じように差分が表示されてしまいます。
matsuand

2021/04/05 04:49 編集

「sparse-checkoutの設定」とは具体的に何をどのようにされたのでしょうか? 十分にはわかっていませんが、spase-checkout は"取ってくるもの"を指定できますが、"取ってこないもの"を指定できる機能もあるんですか(分かっておりません)? 「!.github」という記述を示されていますが、.gitignore の記述であるかのように想像したのですが、そうではないのでしょうか? 追記:ごめんなさい、他所で調べました。"取ってこないもの"も指定できるんですね。とすると無駄なコメントでした。すみません。
matsuand

2021/04/05 04:52

引き続きすみません。「!.github/」と(最後にスラッシュ)を書くべきかと想像したのですが、どうでしょうか。
Jake5

2021/04/05 07:24

こちら記載に誤りがございました。おっしゃる通り「/」が必要です。 ご指摘ありがとうございます。 (実際のファイルには「/」がついております)
guest

回答2

0

ベストアンサー

sparse checkoutはあくまでもチェックアウトに関しての機能です。
ローカルにファイルを展開するかしないか、を設定するだけで、レポジトリ(コミット)にファイルが含まれていることには変わり有りません。
なので、git diff --stat develop feature/Aと、developとfeature/Aのコミットの間でdiffをとれば、sparse checkoutの設定に関係なく、両者の違いがあれば表示されることになると思います。

ローカルのファイルとコミットの間でのdiffとかなら、sparse checkoutの設定に意味がでてきそうです。

mergeでコンフリクトしたときに、ファイルが作成されてしまうのは、
sparse部分でのコンフリクトに気づかないままそれを無視してmergeできてしまうと、
sparseしていない人にとっては問題が起こりそうなので、それに気づけるためには必要なのだろうと想像します。

正しい対処方法としては、sparse checkoutしていない環境でmergeをやって、コンフリクトを消すべきなのではないかと思います。

投稿2021/04/09 00:22

bsdfan

総合スコア4794

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

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

Jake5

2021/04/09 02:49

ご回答ありがとうございます。 そういうことだったのですね。 こちら、完全にレポジトリ(コミット)に.githubファイルを含めないようにすることは可能でしょうか。 pull(こちらはsparse checkoutの設定で対処できる)やmergeの際に.githubを無視したいです 質問の主旨と若干ずれてはしまいますが、ご教示いただけますと幸いです。
bsdfan

2021/04/09 03:20

完全にとなると、ファイルを消してコミットするしかないと思います。ちょっと他には思い浮かびません。 リモートには存在するけど、ローカルでは存在を意識しなくてよいようにしたいということでしょうか? sparse checkoutしているのに merge でコンフリクトが起きるというのは、運用の仕方で回避すべきところなのかと思います。そのファイルを編集した人(sparseしてない人)がmergeまでやってコンフリクトを解消しておけば、ほかの人は引き続き気にせずに作業できると思います。もしくは編集禁止にしてしまうとか。
Jake5

2021/04/14 09:29

遅くなってしまいすみません。 >ローカルでは存在を意識しなくてよいようにしたいということでしょうか? ご認識の通りです。.githubフォルダにはgithub actionsで使用する設定ファイルが含まれており、ローカルでの作業には不必要なので無視したいです。 いろいろ調べてみたのですが、運用でカバーするのを避けるとするとsparse checkoutではなく、git update-index --assume-unchangedやgit update-index --no-assume-unchangedを使うのがよいのでしょうか?
bsdfan

2021/04/14 23:46

--assume-unchangedや、--skip-worktreeを使ったとしても、merge conflictが発生するケースでは、存在を意識しないですすめることはできないと思います。 誰かがそのコンフリクトを解消しないかぎり、mergeはできないです。
Jake5

2021/04/15 13:27

承知しました。 ご丁寧にご回答いただきありがとうございました。
guest

0

設定がうまくいっていないと想像します。間違っていたらすいません。

bash

1cd develop 2git config core.sparsecheckout 3 4cd ../feature/A 5git config core.sparsecheckout 6

「true」と表示されていれば、sparsecheckoutが設定されており、何も表示していなければ、設定がされていないと思います。

trueだった場合、

bash

1cd develop 2cat .git/info/sparse-checkout 3 4cd ../feature/A 5cat .git/info/sparse-checkout

ご存知のように、catしたファイルに、

txt

1/* 2!.github/

と書かれていれば、設定は間違っておりません。

ご確認よろしくお願いします。

投稿2021/04/07 13:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Jake5

2021/04/08 16:36

ご回答ありがとうございます。 develop、feature/Aどちらもgit config core.sparsecheckoutはtrueとなり、両方.git/info/sparse-checkoutの中身も書かれております。 そのため、sparsecheckoutの設定は正しいようです。。
退会済みユーザー

退会済みユーザー

2021/04/08 16:44

そうですか、回答になっていなかったですね。すいません。 こちらで同様のレポジトリを作りましたが、同じ感じにならず。。。 たぶん、自分には難しい課題でした。低評価つけておいてください。 同じようなレポジトリって、簡単にくれるのでしょうか? 作り方を教えて頂ければ、試して見ます。
Jake5

2021/04/09 02:50

いえいえ、問題に向き合っていただけるだけで嬉しいです。 github actionsと呼ばれるCIツールのようなものを使用しているため、完全に再現させるのは難しいと考えております。 今後も何か不明点があれば、お力添えいただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問