ソフトウェア開発の現場で大人気のGitHub。
バージョン管理ツールとしてのGitのメリットは、機械学習の分野でも当てはまります。
本記事では、初心者向けに、コマンド、メッセージ、ブランチ、コンフリクトなどの基本知識を解説します。
目次
GitHubって何?Gitのメリットを知ろう!
Git、Githubって何?
GitHubは、ソフトウェア開発プロジェクトのためのソースコード管理サービスです。
Gitというツールを用いてバージョン管理をしてくれるwebサービスである点に、大きな特徴があります。
利用者は、「コミット(commit、ファイルの追加や変更の履歴をリポジトリに保存する)」 や「プッシュ(push、ファイルの追加や変更の履歴をリモートリポジトリにアップロードする)」などの操作によって、「リポジトリ」と呼ばれる場所に、ファイルやディレクトリの状態を保存しておくことができます。
操作例)...GitHub上で作成したリポジトリと自分のローカルレポジトリを紐付ける作業
- git remote add origin https://github.com/skyremem/test3.git
- git push -u origin master
以下、本記事では、「GitHubを使い始めたばかりの人」を対象に、「バージョン管理」の観点から、GitHubの便利さと、具体的なコマンドやメッセージ等の機能について解説していきます。
Gitを用いたバージョン管理(自動化したい内容)
Gitは、バージョン管理、つまり、ファイルやディレクトリの変更履歴をためておくことができるツールです。
具体的には、次の4点の記録を行うことができます。
- どのファイルが変更されたのか
- 何が変更されたのか
- どうして変更されたのか
- 誰が変更したのか
他のビジネスツールで例えていうならば、Google Spreadsheetの「変更履歴」と似たイメージです。
ただし、スプレッドシートでは、3の「どうして変更されたのか」までは追跡できません。
この点を鑑みると、Gitは、より開発者向けにバージョン管理の機能を強化されているツールだと言えるでしょう。
Gitのメリット
Gitには、バージョン管理を行ってくれるツールとして3つの特徴があります。
- ファイルを変更前に戻すことができる
- チームで共有してファイルを編集できる
- コンフリクトという機能がついている
これらの特徴から、Gitには次のようなメリットがあります。
Git、Github を話すメリット |
メリット①複数人でファイルの編集、共同作業を行う事が可能 |
メリット②もし、複数人で同時にファイルを編集していた場合、どちらを正解とするかを「コンフリクト」という形で教えてくれる |
ソフトウェア開発のみならず、機械学習のプロジェクトにおいても、複数人のチームで仕事を進めていくのが通常です。
そうした中、Gitは、複数人での作業に適した優れた機能をもっているため、管理ツールとして使い勝手が良いと言われています。
ちなみに、実際にコンフリクトが起きた場合には、次のように対応します。
- resolve conflictでコンフリクトが起きている場所を確認
- >>>カッコ内がコンフリクトが起きている箇所なのでどちらかを削除するなりして対応する
Gitの基本的な機能を知ろう!
Gitの基本的なコマンド
Gitには、「コマンド」と呼ばれる機能があります。
コマンドは、特定の機能を用いるために、GitHub上に入力する特定の文字列のことです。
下表は、初心者の方がまず覚えておくべき便利なコマンド一覧です。
コマンド名 | コマンドの機能、役割 | 注意点 | どんな場面・目的で使うか? |
git init | ・gitを有効化するコマンド(有効化とは現在ディレクトリをgitとして利用するという意味)
・ローカルのディレクトリ内でgit initを打つことでローカルリポジトリとして登録する |
・リポジトリを複数持つことも可能だが、その場合複数のリモートリポジトリが必要になる | ・gitに必要な色々なファイルを作成してくれる(追跡してくれる |
git status | ・前回のコミット(バージョン履歴)と比べて、どのファイルが変更されてのか確認する | ||
git add file名 | ・gitに追加したいファイル名を教える | ||
git commit file名 | ・実際にバージョン履歴として残す | ・ステージング(add)とコミットの2回ステップが必要 | ・変更しては行けないファイルの変更を防ぐ為に2回に分けている
(git addで新しいバージョン履歴を人間に目視させる) |
git log | ・コミット履歴(バージョン履歴)を見ることができる | ||
git checkout file名 | ・1つ前のバージョン履歴に戻る | ||
git diff ファイル名 | ・前回のバージョンと比べて何が変更されたのか調べる |
これらのコマンドは、機械学習の現場でも常に頻繁に用いるものなので、覚えていないコマンドがある方は、本記事をブックマークするなどして、いつでも参照できる状態にしておくことをお勧めします。
Gitのコミットメッセージ
GitHubでは、コミット(変更内容を保存)したときに、その内容をメッセージとして残す必要があります。
そのメッセージのことを「コミットメッセージ」と呼び、次の4つのルールに基づいて作成されます。
- Prefix:何をしたかを接頭辞で短くあらわす
- Subject:何をしたかを短い文章にする
- Body:なぜそれをしたのかを文章にする
- Footer:補足情報を載せる
各ルールの詳細については、こちらのブログによくまとまっているので、よければ参照してみてください。
ブランチ(branch)
ブランチ(branch)は、複数のバージョンにおける変更履歴を分岐して記録していくための機能です。
異なるブランチ同士は互いに影響を及ぼさない仕様になっているため、現在リリースしてるバージョンのメンテナンスをしながら新たな機能追加やバグ修正を行う場合など、同じリポジトリ内で同時並行の開発を行うことが可能になります。
ブランチを使うためのコマンドは次の通りです。
コマンド名 | コマンドの機能、役割 | どんな場面・目的で使うか? |
git branch ブランチ名 | ブランチの作成 | - |
git checkout ブランチ名 | ブランチの変更 | - |
git merge ブランチ名 | 自分が今いるブランチに、ブランチ名の変更内容を加える | ブランチで作業した内容をマスターに写す必要がある場合に用いる |
このブランチ機能を用いて、とても大事なファイルを複数人で編集したい場合には次のような点に注意が必要です。
- 本体のファイルをいじらずに、必ずコピーファイルを編集する・・・(※)
- 本体のファイル:マスターブランチ
- コピーファイル:gitでいうブランチ
- マスターブランチは開発リーダーによる認証を必要とする
- 1つ1つの機能追加、本日の進捗をブランチで切って上げる必要がある
(※)本体ファイルをいじってしまう例:git push origin master(←やってはいけないコマンド)
└変更した場合、その履歴をマスターにそのまま乗っけてしまうのは危険である。
└直接masterに変更履歴を乗っけてしまうのはまずい
└必ずローカル時に作成したbranch名でpushすること