こんにちは、しまねこデザインのコンブです。
今日は、私たちが開発中に遭遇した「謎のデプロイエラー」と、その正体についてお話しします。

1. Gitは「タイムマシン」であり「交換日記」

まずは基本のおさらいです。Git(ギット)って何でしょう?
難しく考えずに、こうイメージしてください。

  • タイムマシン機能: 「あの時の状態に戻して!」ができる(セーブポイント作成)
  • 交換日記機能: 「私はここを直したよ」「僕はここを足したよ」を合体させる

2. 「本体」と「脳みそ」

ここからが本題です。Gitを使っているフォルダ(リポジトリ)の中には、実は2種類のデータが入っています。

graph TD
    Root[📁 プロジェクトフォルダ]
    
    subgraph Visible [目に見えるもの]
        File1[📄 index.html]
        File2[🎨 style.css]
        File3[🖼️ image.jpg]
    end
    
    subgraph Invisible [見えないもの]
        GitFolder[🧠 .git フォルダ]
    end
    
    Root --> Visible
    Root --> Invisible
    
    GitFolder -.->|全ての変更履歴を記憶| Visible
    style GitFolder fill:#ffcccc,stroke:#ff0000,stroke-width:2px
                    
図: 普段見ているファイルと、隠れている脳みそ(.git)

この .git という隠しフォルダこそがGitの本体(脳みそ)です。
「誰が、いつ、どこを変更したか」という記憶は、すべてこの小箱に入っています。
私たちが普段いじっているファイルは、この脳みそが見せてくれている「現在の姿」にすぎません。

3. マトリョーシカの罠(サブモジュール問題)

さて、今回起きたトラブルはこれです。
「他のGitプロジェクトのフォルダを、そのままコピーして持ってきた」
これがなぜいけないのでしょうか?

graph TD
    Main[📁 メインプロジェクト] --> MainBrain[🧠 メインの脳 (.git)]
    
    subgraph CopyFailure [❌ 危険な状態]
        Copied[📁 コピーしてきたフォルダ]
        CopiedBrain[🧠 コピー元の脳 (.git)]
    end
    
    Main --> Copied
    Copied --> CopiedBrain
    
    MainBrain --×|他人の脳みそは理解できない| CopiedBrain
    
    style CopiedBrain fill:#ff0000,color:#fff
                    
図: 脳みその中に別の脳みそが入ってしまう

フォルダの中に、別の .git(脳みそ)が入ったままコピーしてしまうと、
メインの脳みそは「あ、ここは別の独立した国(サブモジュール)なんだな」と判断します。
その結果、中身のファイルを無視したり、クラウドへのアップロード時に「その国の住所(URL)を知らないよ!」とエラーになったりするのです。

4. 解決策:脳みそを置いてくる

他のプロジェクトから素材としてフォルダを持ってきたいときは、どうすればいいか。
答えはシンプルです。
「脳みそ(.git)を削除してから取り込む」これだけです。

flowchart LR
    Step1[📁 コピーしたフォルダ] -->|中を見る| Step2[🧠 .git フォルダを発見]
    Step2 -->|削除!| Step3[🗑️ ゴミ箱]
    Step1 -->|ただのファイルの束になる| Step4[✨ 安全な素材]
    
    Step4 -->|メインに取り込み| Main[📁 メインプロジェクト]
                    
図: 正しい取り込み方

.git フォルダさえ消してしまえば、それはただの「HTMLや画像の集まり」になります。
そうすれば、メインプロジェクトの脳みそが「これらは私の体の一部だ」と認識して、正しく管理してくれます。

💡 今日の教訓

他からフォルダを持ってきたら、まずは隠しファイルを表示して .git がないかチェックしよう!
あったら即削除!これだけで平和が訪れます。


5. 深掘り:パラレルワールド(ブランチ)

🌿 もしもの世界

Gitの真骨頂は「本番の世界を汚さずに、実験用の世界を作れる」ことです。
これを「ブランチ(枝)」と呼びます。

gitGraph
    commit id: "Ver.1"
    commit id: "Ver.2"
    branch feature
    checkout feature
    commit id: "実験中..."
    commit id: "成功!"
    checkout main
    merge feature id: "合体"
    commit id: "Ver.3"
                    
図: 本線を守りながら実験する

6. 深掘り:交換日記の掲示板(リモート)

「手元のPC(ローカル)」と「GitHub(リモート)」の関係は、少しややこしいですね。
こう考えるとスッキリします。

🏫 学校の掲示板
  • Push: 自分のノートの内容を、教室の掲示板に書き写すこと。
  • Pull: 誰かが掲示板に書いた内容を、自分のノートに書き写すこと。
sequenceDiagram
    participant PC as 🏠 自分のPC
    participant GitHub as ☁️ GitHub (掲示板)
    participant Member as 🏠 メンバーのPC

    PC->>PC: 作業してコミット (セーブ)
    PC->>GitHub: Push (掲示板に書き写す)
    Note over GitHub: 全員が見れる状態
    GitHub->>Member: Pull (変更を取り込む)
                    
図: Pushして初めてみんなに伝わる
Topへ戻る