これからIoTに取り組もうとしている方にとって、IoTはもちろん、Gitなるものまで覚えないといけないとなると億劫になってしまうかも知れません。今回はそんな方のために、Gitのごくごく基本的な使い方を紹介します。
Gitをインストールしましょう
まず必要なのはGitコマンドです。WindowsやmacOSであればバイナリのインストーラーを使ったり、Homebrewやapt、yumといったパッケージ管理からインストールすることもできます。
最終的にコマンドプロンプトやターミナルなどで git
コマンドが使えればOKです。
$ git version
git version 2.15.1
GitHubにアカウント登録しましょう
まずGitの説明を行う前にGitHubにアカウント登録するところからはじめましょう。GitHubの登録はこちらから行えます。
アカウントを取得したら、リポジトリを作成しましょう。リポジトリとはバージョン管理されるソースコードが保存される場所のことです。右上にあるアイコンをクリックして、New Repositoryを選択します。
リポジトリの名前は任意ですが、英数字と一部の記号だけ利用できます。リポジトリを作成すると、以下のような画面になります。これがまず基本のGitコマンドになるでしょう。
echo "# (作成したリポジトリ名)" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:(GitHubのユーザ名)/(作成したリポジトリ名).git
git push -u origin master
Gitコマンドについて
ではまず上記のコマンドから紹介していきます。Gitでは基本的にサブコマンドによって実行内容を指定します。最初の git init
であれば、initがサブコマンドに当たります。
init:初期化
Gitリポジトリを作成します。これを実行すると、実行したフォルダ内に .git
というフォルダが作られます。この時点ではリポジトリができただけで、同じフォルダにあるファイルなどは未登録で、バージョン管理対象外です。
add:追加
Gitリポジトリにファイルを追加します。これまでGitのバージョン管理対象外だったファイルを対象にします。
commit:確定
ファイルを追加、更新、削除したアクションを確定させます。確定させていない場合には差し戻しが簡単にできます。確定させてしまった後にファイルを戻したい場合は、多少複雑な操作を行わないといけません。
-m
の後にはメッセージ(ログ)を入力します。何の変更であったのか分かりやすい文章を書いておきましょう。
remote:リモートリポジトリの登録、削除など
Gitは分散型バージョン管理システムですが、リモートにあるリポジトリを登録することで、そのリポジトリに対してローカルでの変更を反映できるようになります。リポジトリは個々人で保持できますが、集約された場所があることでファイルの共有が実現できます。 git remote add (エイリアス名) (リモートのリポジトリURL)
という指定方法をします。
逆にリモートのリポジトリを削除したい場合は git remote remove (エイリアス名)
になります。
push:リモートのリポジトリに送信する
ローカルでの変更をリモートのリポジトリに送信します。 git push (リモートのリポジトリ名) (ローカルリポジトリのブランチ名)
という指定をします。ブランチについては後述します。
masterとは何か
masterというのはローカルのブランチ名です。ブランチ(Branch)とは日本語で枝のことですが、バージョン管理もブランチによって分岐させられるようになっています。常にmasterしかなかった場合、修正がすべて一箇所に対してだけ行われます。しかしブランチを作ることで、開発中やリリース直前と言った状態を管理できるようになります。そして開発が終わった段階でmasterブランチに一気に反映できます。多くの場合、masterブランチは直接変更せず、別なブランチを編集した結果を反映(マージ)する方法がとられます。
その他のサブコマンド
では実際にGitを使っていく上で便利なサブコマンドを紹介します。
status:状態を確認
ローカルのリポジトリに対して行われた変更を確認できます。以下の例ではTODOというファイルが追加されたのが分かります。このファイルをバージョン管理に登録する際には add
サブコマンドを使います。
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
TODO
nothing added to commit but untracked files present (use "git add" to track)
checkout:状態の差し戻し
もし間違った変更をしてしまったり、ファイルを削除してしまったらチェックアウトを行います。例えば以下のように間違った修正を行ってしまったとします。
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: sherlock.py
no changes added to commit (use "git add" and/or "git commit -a")
これをcheckoutで差し戻します。
$ git checkout sherlock.py
そうすると変更がなかったことになります。
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
まだバージョン管理に登録していないファイルはチェックアウトの対象外です。
ブランチを切り替える
チェックアウトにはもう一つの機能があります。それはブランチの切り替えです。新しくブランチを作成する場合には -b
を付けて実行します。
$ git checkout -b dev
Switched to a new branch 'dev'
すでにあるブランチの場合は -b
は不要です。
$ git checkout dev
Switched to branch 'dev'
ブランチの一覧は branch
で確認できます。
$ git branch
* dev
master
リモートのブランチも含めて確認する際には -a
を付けます。
$ git branch -a
* dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/docker_hub
remotes/origin/hoadlck-csv
remotes/origin/hoadlck-specify-sites
remotes/origin/hoadlck-tests-take1
remotes/origin/master
remotes/origin/semantic_versioning
ファイルの削除
リポジトリからファイルを削除する場合には rm サブコマンドを使います。
$ git rm TODO
rm 'TODO'
この場合も、まだ処理は確定していません。statusで見ると確認できます。
$ git status
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: TODO
そしてcommitを使って確定させます。
$ git commit -m "Delete"
[dev d57f584]
Delete 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 TODO
ブランチの変更をマージする
開発中のブランチで編集を行ったら、その内容をmasterブランチに反映したいと思うことでしょう。その場合はまずmasterブランチに戻ります。
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
そして merge サブコマンドを使います。
$ git merge (反映元ブランチ名) (反映先ブランチ名)
Updating cc7127c..f88f7e2
Fast-forward
TODO | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 TODO
コードの修正がバッティングしている場合などは別途処理が必要になります。そのため、メインであるmasterブランチは人の手では触らず、コマンドからだけ変更すると言った運用ルールがお勧めです。
リモートの修正を取り込む
本格的な運用になると、ローカルで編集してGitHubなどに送信し、それをオンライン上でマージします。ローカルで行うのは、個人開発の場合でしょう。複数人で開発する場合にはオンライン上にあるリポジトリを使った方が共有しやすくなります。
そしてオンラインでの編集内容をローカルに取り込む際には pull サブコマンドを使います。
$ git pull
remote: Enumerating objects: 405, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (131/131), done.
remote: Total 736 (delta 311), reused 357 (delta 274), pack-reused 331
Receiving objects: 100% (736/736), 154.74 KiB | 1.27 MiB/s, done.
Resolving deltas: 100% (457/457), completed with 15 local objects.
From https://github.com/(GitHubのユーザ名)/(リポジトリ名)
cc7127c..eee1be1 master -> origin/master
* [new branch] hoadlck-500px-fix -> origin/hoadlck-500px-fix
ローカルで編集し、リモートに送信してマージ、そしてマージ内容をローカルに反映という流れがGit開発の基本になります。
まとめ
Gitを使った開発はそれほど難しくありませんが、コマンドを覚える必要はあるでしょう。GitHub DesktopやSourcetree、TortoiseGit、GuitarなどのGUIソフトウェアを使ったり、プログラミングエディタに付属しているGit機能を使うこともできます。Gitを使うことで開発が効率化したり、コードの共有などもスムーズに実現します。ぜひ使いこなしてください!
]]>