Open6
[TIL] 11. Git

各リポジトリ/ブランチ間の関係

-
git fetch
はリモートブランチ(main)からリモート追跡ブランチ(origin/main)に反映するコマンド。 - originとはリモートリポジトリのデフォルト名のこと。初期化時に設定している。
-
git branch -a
ではローカルブランチとリモート追跡ブランチの一覧情報(つまりローカルリポジトリのブランチ一覧情報)を表示する。

Git/GitHubの内部動作
Gitでのバージョン管理情報はGitオブジェクトとリファレンスから成り立っており、これらは.gitディレクトリに格納されている。Gitオブジェクトの集合で構成された有向非巡回グラフとポストイットに相当するリファレンスでバージョン管理を行っていると考えることができる。
各Gitオブジェクトは以下の情報を可逆圧縮し、ハッシュ化したものを指す。以下の3種が存在する。
- blobオブジェクト:個々のファイルデータ情報
- treeオブジェクト:ディレクトリ情報(配下のファイル名、参照先ディレクトリ情報)
- commitオブジェクト:トップレベルtreeオブジェクトや親コミット情報
リファレンスはcommitオブジェクトを指し示すポインタ。以下の2種が存在する。
- branchレファレンス:commitを指す単純なポインタであり、ブランチを定義
- HEADレファレンス:現在Checkoutしているcommitのポインタ(=現在の位置を指し示す)
ブランチを切り替えるという操作(git checkout)をすると、HEADレファレンスが別のbranchレファレンスを参照する。.gitディレクトリに格納されている新しい参照先のGitオブジェクト情報からフォルダ構成を再構築することでブランチの切り替えを実現する。

git init
を実行することでローカルリポジトリを作成(=.gitディレクトリを作成)する。
逆も然りで「ローカルリポジトリを削除すること=.gitディレクトリを削除すること」である。

Pushしてもリモートリポジトリに反映されない?
ローカルリポジトリをPushしても、一部の内部ディレクトリだけがリモートリポジトリにアップロードされない場合には、その内部ディレクトリが既にgit管理下にいる可能性がある。つまり、内部ディレクトリにも.gitディレクトリが存在する可能性がある。この場合にはローカルリポジトリと内部ディレクトリで同期先となるリモートリポジトリ(origin)が異なる。
作成者以外のコメントは許可されていません