いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

Gitをコマンドから操作する #1 サルわか入門編

Gitについて学んだことのメモ。主にGitをコマンドから実行する方法について学んだ。 参考サイトはここの入門編
自分向けのメモなのでまとめかたは雑。そのうちきれいに。

Git

「Git」は、ソースコードのバージョンを管理するツールのことで正確には「分散バージョン管理システム」のこと。Git以外にもCVSSubversionがあるが近年広く受け入れられているのがGit。

GitとGithubの違い

Gitはソースコードのバージョンを管理する「ツール」のことで、Githubは、Gitを利用した開発者を支援する「Webサービス」。

インストールと初期設定

  • インストールはここから
  • .gitconfigファイルにユーザー名とメールアドレスを設定
$ git config --global user.name "<ユーザ名>"
$ git config --global user.email "<メールアドレス>"

使い方

ローカルリポジトリ作成

Gitの管理下にしたいディレクトリ(この場合はtutorial)に移動してinitコマンドを実行する。

$ cd tutorial/
$ git init
Initialized empty Git repository in /Users/izumi/tutorial/.git/

バージョン管理の状態を確認する

※(準備)tutorialディレクトリに簡単なコメントを書いたsample.txtを置いておく。

バージョン管理の状態を確認するにはgit statusコマンドを実行する。

ステージング

git statusコマンドで状態を確認すると追跡対象外のファイル(Untracked files)があるのでIndexに登録する。これを「ステージングする」という。

f:id:izumii-19:20181228130245p:plain:w400

ステージングするにはaddコマンドを実行する。*1

$ git add <file>

git statusコマンドでもういちど状態を確認する

f:id:izumii-19:20181230152416p:plain:w400

“Changes to be committed” 欄に表示されている、つまりステージされているということがわかる。

コミット

git commitコマンドを実行する。mオプションを付けると1行のコミットメッセージを付けることができる。

実際の運用ではコミットコメントをつけずにコミットすることはないのでmオプションは必須のつもりで覚えておくとよい。

$ git commit -m "first commit"
[master (root-commit) b5803da] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 sample.txt

リポジトリの変更履歴を確認する

git logコマンドを実行する。

$ git log
commit b5803daf1349ff3c6a531cc2a9710d561d58526a (HEAD -> master)
Author: izumi <メールアドレス@gmail.com>
Date:   Sun Dec 30 15:31:56 2018 +0900

    first commit

リモートリポジトリ作成

リモートリポジトリを追加するにはremote addコマンドを実行する。

$ git remote add <name> <url>

<url>にはリモートリポジトリのURLを指定し、<name>にはリモートリポジトリの別名(短い名前)を指定する。

これはリモートリポジトリにアクセスする際、長いURLをいちいち打たなくても良いようにするためで"origin"を指定するのが一般的である。*2

f:id:izumii-19:20181230170413p:plain:w400

プッシュ

リポジトリをプッシュするには、pushコマンドを実行する。

$ git push -u <repository> <refspec>...

<repository>にはプッシュ先のアドレスを指定する(先程リモートリポジトリに"origin"という名前をつけたはずなのでそれを指定)、<refspec>はプッシュするブランチを指定する。

以下、実行結果。

$ git push -u origin master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (10/10), 862 bytes | 862.00 KiB/s, done.
Total 10 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/izumii19/gitTutorial.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

f:id:izumii-19:20181230170711p:plain:w400

リポジトリのクローン

$ git clone <repository> <directory>

<repository>はクローンするリポジトリ名、<directory>はクローンする先になるディレクトリ名を指定する。 ためしに「tutorial2」という名前のディレクトリ名でリモートリポジトリをクローンする。

$ git clone https://github.com/izumii19/gitTutorial.git tutorial2
Cloning into 'tutorial2'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 10 (delta 1), reused 10 (delta 1), pack-reused 0
Unpacking objects: 100% (10/10), done.

コミットコメントのコツ

  • バグ修正や機能追加などの異なる意味を持つ変更はできるだけ分けてコミットする。 (後から履歴を見て特定の変更内容を探しやすくするため。)
  • コミットコメントの標準の書き方

1行目 : コミットでの変更内容の要約

2行目 : 空行

3行目以降 : 変更した理由

*1:パラメータに「.」を指定すると、すべてのファイルをインデックスに登録することができる。

*2:Gitはプッシュやプルの実行時にリモートリポジトリ名を省略すると、originという名前のリモートリポジトリを使用するため、リモートリポジトリにはoriginという名前を付けるのが一般的。