このページでは「Gitってよく聞くけど何に使うの? GitHubとの違いは? どうやって使うの?」といった疑問に答えます。
使い方に関しては、初期化から最初のコミットまでを行います。
前提としてターミナル上でコマンドを打ちます。
Git以外のコマンドの解説はしません。
Gitのダウンロードはこちらから。
参考ページ
Git - Reference
使用した環境
Windows10
WSL2 – Ubuntu 20.04 LTS
Git 2.34.1
Gitとは
Gitはバージョンを管理するソフトフェアです。
オープンソースで無料で使用できます。
例えば、あなたが何かアプリを作っていて、新しいバージョンで、新しい機能を追加しました。
でもその機能はユーザーの評判が良くなく、あなたは元に戻したい、と思ったとします。
そんなときがGitの出番です。
あなたがGitを使って前のバージョンを記録していれば、そのときのバージョンには簡単に戻すことができます。
また別の例えをすると、Gitはゲームにおけるセーブデータを作成する役割を担っています。
長編のゲームをやっていてセーブなしでクリアする人はほとんどいないでしょう。
一度しか取れないアイテムや、条件の分岐するイベントの前には必ずセーブをするはずです。要所要所でセーブして、行き詰まったらやり直すでしょう。
Gitではコミットというものをすることで内容を保存し、履歴をたどってそのときの状況を再現することができます。
GitとGitHubの違い
Gitは主にパソコンで使用するソフトフェアです。
上の方でGitをセーブデータを作ることに例えましたが、このセーブデータを保管する場所のことをGitではリポジトリと言います。
一般にリポジトリはローカル(自分自身のパソコン内)に作成されます。
GitHubはネット上にこのリポジトリを設置したWebサービスです。
GitHubを利用することで複数人での開発を容易にします。
あなたがローカルで作業し、作業が終わったら、自身のリポジトリにそのときの状況を保存します。
それから自身のリポジトリの内容を、GitHubにあるリポジトリに送ります。
他のメンバーも同じようにローカルで作業し、GitHubにあるリポジトリに送ります。
あなたが他のメンバーの作業内容を反映したいときには、今度はGitHubのリポジトリから他の人の変更を取り込めばいいわけです。
ローカルリポジトリ → GitHubのリポジトリ
ローカルリポジトリ ← GitHubのリポジトリ
GitとGitHubは名前は似ていますが、このように別のものです。
運営している団体も異なります。
コミットまでの大まかな流れ
Gitはコミットすることでその内容を残します。
手順としては、
- リポジトリを初期化 or 他からリポジトリをコピー
- ステージに追加
- コミット
となります。
1.リポジトリを初期化 or 他からリポジトリをコピー
リポジトリの初期化やコピーをすると、対象のディレクトリ内にリポジトリが作成されます。
対象のディレクトリ(ワークツリー)に入れてあるファイルがGitで扱えるようになります。
初期化やコピーは最初に一度だけです。
2.ステージに追加
ファイルは入れてあるだけではコミットされません。
ファイルを「ステージに追加する」ということをして、はじめてコミット対象として登録されます。
ステージに追加したファイルは圧縮され、ファイル名と紐付けられます(インデックスされる)。
3.コミット
この段階でコミットをすると、インデックスと、そのファイル構成が記録されます。
このような段階を踏んでコミットします。
コミットは前回のコミットを親として記憶し(最初のコミットに親はいませんが)、コミットを重ねていくたびに親とつながっていきます。
このつながりをたどることで特定のコミットまで戻ることが可能になります。
なぜステージという段階を踏むのか
そもそもなぜステージに追加する作業が必要なのか、疑問に思うかもしれません。
例えば、あなたが仕事でふたつのプロジェクトを抱えている、と想定してみてください。
「プロジェクトファイルA」と「プロジェクトファイルB」は関連がありません。
Aの方が納期が近いので、あなたは主にAの仕事に取り組んでいます。Bの方はAほど迫ったものではないものの、少しずつ仕事を進めておきたい状況です。
Aの仕事がまもなくひと区切りできそうな段階で、あなたは急にプロジェクトBに対していいアイデアを思いつきました。せっかくのアイデアを忘れてしまうかもしれません。あなたは急いでファイルBに変更を加えます。
ここでもしステージという段階がなければ、つぎのコミットでは、AとBの両方が含まれてしまいます。
別々のプロジェクトを同じコミットに含めると、不都合が起きることは想像できるでしょう。
ファイルAだけ前回のコミットに戻したいのに、ファイルBまで戻ってしまう。
Bに加えたアイデアはその時はいいと思ったものの、時間が経ってみればそうではなかった。元に戻したいけど、Aの方まで戻ってしまう、ということが起こりえます。
「ステージに追加」という段階を踏むことで、つぎのコミット対象を選ぶことができ、このような不都合は起きなくなります。
基本コマンド
では、いよいよ実際にやっていきます。
Gitを使う基本的なコマンドは「git」です。
その後に半角スペースをひとつ空けて、実行させたいコマンドを打ちます。
git コマンド
コマンドには色々なものがあり、これからいくつか紹介していきます。
最初のコミットをやってみよう
- Gitの初期設定
- リポジトリを初期化
- ステージに追加
- コミット
という手順で最初のコミットをやってみます。
2は他からリポジトリのコピーをすることでも可能ですが、今回は初期化をします。
インストールがまだの人はこちらからダウンロードしてください。
Gitの初期設定
まず必要最低限の設定を行います。
ユーザーネームとメールアドレスの登録です。
git config --global user.name "ユーザーネーム"
git config --global user.email メールアドレス
golbalをつけると、OSを使うすべてのユーザーに適用される設定となります。
$ git config --global user.name "fujino" $ git config --global user.name test@test
↑の名前とアドレスはサンプルです。
※GitHub等の公開リポジトリにアップロードする場合、メールアドレスも公開しても良いものを使用してください。
そして使用するテキストエディタの登録をします。
git config --global core.editor エディタ名
ここで設定したエディタがコミットメッセージを残すときに起動します。
$ git config --global core.editor "code --wait"
上記は私が使用している「Visual Studio Code」の起動設定。
その他のエディタに関しては、Git Commands - Setup and ConfigのTable 4. Exhaustive list of core.editor configuration commandsを参照してください。
3つ設定しました。
一応できているか確認します。
$ git config --list
user.name=fujino
user.email=test@test
core.editor=code --wait
自分が設定したものが表示されていたら成功です。
リポジトリの初期化
初期化を行うと、指定した対象のディレクトリ内に空のリポジトリを作成します。
コマンドは「init」を使います。
git init ディレクトリのパス
パスに関して↓
実行してみましょう。
$ git init .
Initialized empty Git repository in /home/user/git-dir/.git/
リポジトリの初期化をカレントディレクトリで行いました。
これで空のリポジトリが作成されているはずです。
メッセージにも「Initialized empty Git repository in /home/user/git-dir/.git/」とありますね。
ひとまず私のカレントディレクトリ「git-dir」を確認します。
~/git-dir$ la
.git img.png test.html
「img.png」と「test.html」は元から入っていたファイル。
コマンド「git init」で新しく追加されたのは「.git」という隠しディレクトリで、このなかにリポジトリがあります。
次はステージに追加します。
ステージに追加する
コミットする前段階として、ステージに追加する、ということをします。
ステージに追加したファイルがコミット対象として登録されます。
「add」コマンドを使います。
git add パス
ターミナル
$ git add img.png test.html
ふたつのファイルをステージに追加しました。
また、カレントディレクトリ「.」を指定することで、なかに入っているファイルをすべて追加することもできます。
$ git add .
ステージされているか確認してみましょう。
コマンド「status」を使います。
ワークツリー(作業ディレクトリ)の状態が表示されます。
$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: img.png new file: test.html
「Changes to be committed」
「コミットされる変更点」に「new file」としてステージに追加した2つのファイルが表示されています。
問題ありません。
コミットする
コマンドは「commit」
git commit
上記コマンドを実行すると、Gitの初期設定で決めたエディタが起動します。
(初期設定でエディタを指定しなかった場合、システムのデフォルトのエディタが起動。)
エディッタが起動するのは、コミットにメッセージをつけるためです。
コミットがどういう内容なのか残しましょう。
$ git commit hint: Waiting for your editor to close the file...
ターミナルから実行すると、私の環境では「Visual Studio Code」が起動し、以下のファイルが立ち上がりました。
COMMIT_EDITMSG
初コミット
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
# new file: test.html
# new file: img.png
#
一行目の「初コミット」というのが、私が書き込んだメッセージです。
このファイルを上書き保存し、閉じるとターミナルに戻ってきます。
$ git commit [master (root-commit) c5c8168] 初コミット 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img.png create mode 100644 test.html
これで初めてのコミットが完了しました。
commitコマンドにはオプションがあって、「-m」をつけてメッセージを渡すと、エディタを起動させずにメッセージを残すこともできます。
$ git commit -m "初コミット" [master (root-commit) 8b93a43] 初コミット 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img.png create mode 100644 test.html
まとめ
Gitはバージョンを管理するソフトウェア
GitHubはリポジトリを共有できるWebサービス
このページで扱ったコマンド一覧(基本コマンドgitは除く)
コマンド | 機能 |
---|---|
config --global user.name [name] config --global user.name [email] config --global core.editor [name] | ユーザー名 メールアドレス を登録 エディタ |
config --list | 設定されている値の表示 |
init [path] | リポジトリの初期化 |
add [path] | ステージに追加 |
status | ワークツリーの状態を表示 |
commit [-m] | コミットする |