GitHubって何?
GitHubとは、Gitというバージョン管理ソフトウェアを使って、他の人と共同でプログラムを作れるようにしたインターネット上のサービスです。
なんで使うの?
- バージョン管理ができる
まず第一に、制作途中のプログラムを安全に保管できます。しかも、プログラムのどこを変更したかも記録できるので、いつでも”ちゃんと動いていたハズのあの頃”に戻すことができます。コンテストの提出間際に実行できなくなってパニクる心配が減ります。 - 分散して作業ができる
誰かと作業分担して作っていると必ず起こる「で、どうやってくっつけるの?」問題。データをコピーして作業分担するのは簡単だけど、「俺って結局どこいじったんやっけ?」となり、大事な箇所を間違って上書きして新たなバグの発生源になることがよくあります。
GitHubを使うと変更された部分の中から必要なものだけを選択して統合(マージという)できます。 - なんかカッコイイ
エンジニアにとって、使うツールがカッコイイことは絶対的正義です。
「ちょっとそのブランチ、早いことコミットしてくれる?」
みたいなセリフが自然と言えるようになります。
用語
GitHubでよく使う専門用語を事前に説明しておきます。
repository (リポジトリ) | プログラムの保存場所のことで、手元のコンピュータ側を"local(ローカル)"、GitHub側を"remote(リモート)"と呼び区別する。 |
branch (ブランチ) | 誰かと作業分担するときに作る"プログラムの別バージョン"。 |
merge (マージ) | 分担作業で作ったブランチを合体させること。 |
master (マスター) | 唯一最初からあるブランチ。本筋のプログラム。他のブランチは最終的に全てマスターにマージしていく。 |
pull request (プルリクエスト) | ブランチをマージしたいときに行う依頼のこと。 ※後述のプルと名前が似てるけど全然違う作業だから気をつけて! |
clone (クローン) | リモートのコピーをローカルに作ること。新しいコンピュータで作業を始めるときにまず行う。 |
commit (コミット) | プログラムの変更を記録すること。こまめにコミットしないとあとで泣く。最低でも1日の終わりには必ずコミットしよう。 |
push (プッシュ) | ローカルの変更をリモートに反映すること。commitの後に流れで行うものと考えて良い。 |
pull (プル) | リモートの変更をローカルに反映すること。pushと同時に行うものと考えて良い。pushとpullを合わせてsync(シンク)と呼ぶことも。 |
revert (リバート) | 特定のコミットを取り消すこと。取り消した作業はログに残るので,「やっぱり戻すのやめた!」となったらリバートした結果をリバートすれば良い。 |
discard(ディスカード) | ファイルに対する不要な変更を削除します。コミット履歴を汚さずに簡単に作業を戻せます。 |
作業の流れ
- リポジトリ の作成
- 作業用のコンピュータに クローン作成
- ブランチの作成(共同作業の場合)
- ローカルのプログラムを変更
- 作業のキリの良いところで commit と sync(push & pull)
- 余計な変更に対してはdiscard
- merge したくなったら pull request(共同作業の場合)
- pull request の内容を確認して merge(共同作業の場合)
- 必要に応じて revert して過去のコミットを取り消す。
事前準備
“GitHub Desktop”アプリを作業で使うコンピュータにインストールしておきます。
基本的な操作方法
GitHub(またはGit)の操作には大きく分けて”Webサイトからの操作”と”ローカルのコンピュータからの操作”の2種類があります。さらに、”ローカルのコンピュータからの操作”にも、”ターミナル(コマンド)からの操作”と”GitHub Desktopというアプリからの操作”の2種類があります。
基本的に”ターミナル(コマンド)からの操作”で全ての作業ができるように作られていますが、覚えないといけない事が多いので、ここではできるだけ”説明が楽”な方法を優先します。
- repository の作成(Webサイト)
新しくリポジトリを作成したい場所(Dashboard)へ移動し。”New Repository”を押す。Repository nameには英数字しか使えないので注意。また、スペースは”-“に置き換えられます。
Descriptionにはリポジトリの説明文を書きましょう。
次の選択をPublicにすると全世界に公開されます。
“Initialize this repository with a README”は、一般的にリポジトリに含めるべきとされているREADMEファイルを最初に作っておくかどうかの選択。.gitignoreファイルとは、gitに管理させないファイルを指定する設定ファイルのことで、”Add .gitignore”の選択肢からある程度自動的に作ることができます。例えばUnityを選択すると、”Temp”や”Library”といった他のコンピュータへ送る際に不要なフォルダ等が自動的に除外されます。licenseは公開しないのであれば、Noneでも良い。
Create Repositoryを押して次の手順へ。 - 作業用のコンピュータに クローン作成(GitHub Desktop)
GitHub Desktopアプリケーションを起動し、ログインします。
画面左上の+ボタンからリポジトリを選択してクローンします。
保存先をよく覚えておきましょう。
- ブランチの作成(GitHub Desktop)
ブランチは画面上部の次のボタンから作成。 - ローカルのプログラムを変更
ローカルリポジトリの保存先のフォルダの中に、作業するためのプログラム等を持ってきて、従来通り開発を行います。 - 作業のキリの良いところでCommit と Sync(GitHub Desktop)
作業の適切なタイミングでCommitします。画面の右側で赤の箇所が削除された行で,緑の行が新しく追加された行です。Commitするファイルは個別に選択ができるので,1つずつ確認しながら作業のまとまりに合わせてコミットします。
Commit後は自動的にSync(Push)されないので,「Push origin」を押します。コミットの内容が間違っていた場合はPushする前に限って取り消す(Undo)ことができます。 - 余計な変更に対してはdiscard
Commitするファイルを選ぶ際に,変更する必要が無かったファイルが出てきます。そのようなファイルに対しては,ファイルを右クリックして「Discard changes…」を選ぶことで変更を取り消すことができます。
また,全ての変更を取り消したい場合はファイル一覧の最上部を右クリックし「Discard all changes…」を選択します。
- merge したくなったら pull request(共同作業の場合)
- pull request の内容を確認して merge(共同作業の場合)
- 必要に応じて Revert して過去のコミットを取り消す。
Revertは特定のコミットの変更内容を取り消して元に戻す作業です。ここで注意しなければならないのは,過去に大きくさかのぼって元の状態に戻したい場合は,その時点以降のCommitを全てRevertしなければならないことです。大抵の場合,元に戻したい部分というのは特定のスクリプトに集中しているため,慎重にRevertすれば一部分だけの変更で済むのですが,普段から無秩序にいろいろな変更を混ぜ合わせてCommitしちゃっている場合は,Revertする場合の影響範囲が大きくなり大変です。そのためにもCommitはこまめに行うのが良いでしょう。
注意点
学校みたいなプロキシサーバを通してインターネットに接続している環境の場合は、ターミナルから下記の設定が必要です。
なお、コン部のみなさんは
“生徒共有(科技)/コンピュータ部/setup_git_proxy.command”をダブルクリックすればOK。