こんにちは、しまねこデザインのコンブです。
今日は、私たちが開発中に遭遇した「謎のデプロイエラー」と、その正体についてお話しします。
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の本体(脳みそ)です。
「誰が、いつ、どこを変更したか」という記憶は、すべてこの小箱に入っています。
私たちが普段いじっているファイルは、この脳みそが見せてくれている「現在の姿」にすぎません。
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 (変更を取り込む)