初心者です。間違いに気付いたら適宜直し、書ききれなかったことは加筆もしていきます。
Gitとは
ファイルのバージョン管理システムのこと。
GitHubは、自分のGitの内容をサーバ上で預かってくれるサービス
※GitHubのほかにも類似したサービスにBitbucketなどがある
Gitの仕組み
まず個人の環境(ローカルな環境)の中に、
ワークツリー:作業している場所(ディレクトリ)
ステージ:リポジトリの前段階
リポジトリ:ワークツリー内のファイルを圧縮したファイルやコミットの履歴などを入れておく場所
がある。これらすべてローカルの話。
add と commit
Git
では、add
によって作業場(ワークツリー)の内容をステージ内に保存し、commit
でリポジトリに正式なコミット(変更)として保存する
具体的には、
git add
によって、ワークツリーのファイルすべてを圧縮してリポジトリに格納し、さらに、ステージにインデックスを作成する
インデックスには、圧縮ファイルとワークツリーのファイルが格納されている
※ワークツリーのファイルすべてを保存(スナップショット)しているのは、変更履歴を行き来するときに差分を保存するよりも動作が早くなるから
git commit
によって、リポジトリの中にツリーを作成(インデックスのコピー)し、コミットを作成する
コミットには、「ツリーへのリンク」「作成者」「日付」「コメント」「親コミットへのリンク」の情報が格納されている
ここで、リポジトリ内にある「圧縮ファイル」「ツリー」「コミット」をGitオブジェクトといい、これらは.git/objects
内に格納されている
コミットは親コミットとつながっている
コミットに格納されている「親コミットへのリンク」がとても重要で、これによって変更履歴を追うことができる