Gitとは? Gitの基礎知識と具体的な使い方
目次から読む
Git とは
Gitとはバージョン管理システムのことです。 バージョン管理するメリットは、- どのファイルの何を
- 誰が
- いつ
- 何のために
Git の仕組み
Gitはいつ、誰が、何を、何のために変更したかを時系列順に記録します。 Gitは、差分だけを保存するのではなく、バージョンごとにスナップショットで保存しています。 バージョン管理の際、ブランチごとにバージョンのスナップショットがあることでとても作業が捗るもし差分で保存されていると、変更の都度計算し直さないといけなくなり、とても効率が悪くなります。 git以前のバージョン管理ツールがそう差分での管理でした。バージョンごとにコミットがあることで、コミットを辿ることでバージョンを遡ることができます。 最新のコミットには、その前のコミット(バージョン)が保管されています。 その前のコミットには、その一つ前のコミットが記憶されています。 そして、それぞれのバージョンをスナップショットで保存しているので、以前の状態に簡単に戻すことができます。Git操作の流れ
基本的な開発の流れは次の通りです。- ファイルを変更します。
- ファイルを個人リポジトリに登録します。(commit)
- 共有リポジトリに保管する。(push)
- 共有リポジトリの情報を同期する(pull)
- ファイルを変更します。
- ファイルを個人リポジトリに登録します。(commit)
- 共有リポジトリに保管する。(push)
ローカルからリモートへアップする
ローカル(手元のパソコンのこと)は、作業する場所であるワークツリーとローカルリポジトリがあります。 ワークとは作業場のことです。ツリーとはディレクトリやフォルダのことです。リポジトリとはコードの保管場所、履歴データのデータベースのことです。まずワークツリーからローカルリポジトリへスナップショットを記録します。言い換えると、自分の作業した場所から変更履歴を自分のパソコンの変更履歴の保管場所に保存するということです。そして、オンライン上のリモートリポジトリへおなじものを保管します、リモートリポジトリはGitHubのことです。リモートからローカルへダウンロードする
他の人が行った変更を自分のパソコンに取り込みたいときリモートリポジトリ(GitHub)からローカルリポジトリへ変更履歴を取得します。そして、ローカルリポジトリから自分の作業場所であるワークツリーにに記録を反映させます。 これらのことが、チーム開発をしている場合は他の人のパソコンでも行われます。ローカルについて
ローカルは、次の3つのエリアに分かれています。 – ワークツリー – ステージ – リポジトリ まず、ワークツリー(作業場所)でファイルを変更します。ワークツリーでファイルの変更を行ったらローカルリポジトリに記録を反映させる前に、ステージという場所に追加します。ステージとは、コミットする変更を準備するための場所です。 コミットとは、スナップショットを記録することです。このワークツリーからステージへ追加するコマンドが、git addです。なぜステージが必要なのか?
たくさんのファイルを変更した場合、変更が完了したものもあれば、変更が途中のものもある状態になることがあります。その場合、変更が完了したものだけをGitHubにあげたい場合、変更が完了した分だけをステージに追加することで分けることができます。変更が完了したもののみをステージに置くことができます。そして、コミット、つまりスナップショットを記録します。このコマンドがgit commitです。Gitのデータ管理の仕組みについて
Gitのコマンドの裏で起こっていることどのようにGitはデータを管理しているのか、履歴を保存した時に何が起こっているのかを知っておきましょう。 まずは、概要を理解しておきましょう。 git addの裏側で起きることまずindex.jsというファイルを作ったとしましょう。ステージに追加ためには、まずローカルリポジトリに圧縮したファイルAを保存します。圧縮ファイルは実際はヘッダーとファイル内容をSHA-1というハッシュ関数で 40文字の英数字に変換したハッシュIDが保存されます。そのハッシュIDは必ず一意のIDとなります。同じなら更新はされませんし。内容が少しでも変更されれば新しいIDになります。そして、ローカルリポジトリからステージにインデックスというファイルが保存されます。そのインデックスというファイルには圧縮ファイルAとindex.jsがマッピングされた状態(圧縮ファイルAはindex.jsですよという紐付け情報)が保存されます。これがgit addで起きる概要です。git commitの裏側で起きること
コミットすると、インデックスファイルを元にツリーファイル1という同じような内容のファイルがローカルリポジトリに作られます。ツリーファイルはファイル名とファイルの中身(各階層ごとのファイル構造も含めて)保存されます。ツリー1が作成されたら、次はコミット1というファイルが作成されます。コミット1には次のような情報が記載されています。- ツリー1というファイル名→どのスナップショットかわかる
- 作成者(gitに設定した名前とメールアドレス)→誰が変更したかわかる
- コミットしたときの日時→いつ変更したかわか
- るコミットメッセージ→なぜ変更したかわかる
Gitのデータ構造について
次に、ワークツリー(パソコンの作業場所)でsrc/style.cssというファイルを作成したとします。 これをgit addすると、同じように圧縮ファイルBがローカルリポジトリで作成されます。そして、ステージにあるインデックスファイルに、src/style.cssは圧縮ファイルBですよというマッピングされた情報が追加されます。 次にgit commitすると、ツリー2というファイルが作成されます。そこにはインデックスで追記したファイル構成が保存されます。そして、コミット2というファイルが作成されます。 – ツリー2 – 作成者 – 日時 – コミットメッセージ に加えて、親コミットとしてコミット1が保存されます。直前のコミットを親コミットとして記録します。 これがあることで、変更履歴を辿れるようになります。このコミットの連鎖をたどることで変更履歴、つまりバージョン管理が可能なります。 Gitで大事なことは、データを圧縮しているということ、そして差分ではなくスナップショットで保存しているという点です。これらを踏まえてGitのコマンドをみてみましょう。 圧縮ファイルというのは、blob(ブロブ)オブジェクトというの正式です。ツリーファイルは、treeオブジェクト、コミットファイルはcommitオブジェクトと言います。Githubに新規リポジトリを追加して新しいプロジェクトを開始する手順
Githubに新規リポジトリを追加して新しいプロジェクトを開始するまでのgitコマンドです。
ターミナル上でアプリ作成のためのルートディレクトリに移動します。cd フォルダ名
初期化します。git initgit add -A
addしてcommitしておきます。git commit -m "Initialize repository"- githubのページにアクセスして、New repositoryをクリックします。

- Repository nameなどを設定してCreate repositoryをクリックします。
- 「…or push an existing repository from the command line」のところに書かれている
をターミナルに入力します。git remote add origin https://github.com/名前/リポジトリ名.git
ローカルリポジトリの内容をリモートリポジトリに反映します。git push origin master
