Git/GitHubについてお勉強しましょう。
- GitHubの機能をなんとなく理解する
- 最低限のGitのコマンドを理解する
- プルリクエストを送るフローを体験する
GUIクライアントの Source Tree を使うのがおすすめ。
- 自動的にフェッチしてくれる
- 部分的・一行単位のステージ/アンステージがやりやすい
調べた限り使い勝手の良いGUIクライアントはなかったので、コマンドラインから使う。
$ sudo apt-get install git
Gitのクライアント。
$ sudo apt-get install tig
git
コマンドを拡張したhub
コマンド。実行にはRuby
が必要。
https://github.com/settings/ssh
右上のAdd SSH key
をクリック。
公開鍵~/.ssh/id_rsa.pub
の中身をKey
にコピペする。
7ドル/月のディスカウントを2年間受けられるので、Microプラン(プライベートリポジトリ5)が無料で利用できる。
大学ドメインのメールアドレスの登録が必要。
他のユーザーをフォローできる。
フォロイーが新しくリポジトリを作った・フォークしたなどの情報がNews Feedに流れてくる。
コミット数を時系列に沿って可視化したもの。
コード書いてるか書いてないかが即わかる。
リポジトリの更新状況やissueなどの情報がNews Feedに流れてくる。
いわゆるfav
他のユーザーのリポジトリのコピーを作成する。
バグ報告・要望・todoなど。
対応が終わったらcloseするかんじ。
フォークしたリポジトリの更新を、フォーク元に反映させるためのリクエスト。
フォーク元のユーザーが、更新を取り込むかどうかを決める。
スニペットを登録しておける。
ちょっとしたコマンドや設定とかを書いておくと忘れても大丈夫。
リモートリポジトリを、ローカルにコピーする。
リモートリポジトリにはURLごとに名前をつけることができ、メインのものを慣習的にorigin
と名付ける。
+ - - - - - -+ + - - - - -+
' remote: ' ' local: '
' ' ' '
' +--------+ ' clone ' +------+ '
' | origin | ' -------> ' | repo | '
' +--------+ ' ' +------+ '
' ' ' '
+ - - - - - -+ + - - - - -+
リモートリポジトリの更新を、ローカルリポジトリに取り込む。
正確には、更新をダウンロードするだけのfetch
と、取り込むmerge
もしくはrebase
の2つのステップが実行される。
+ - - - - - -+ +- - - - - +
' remote: ' ' local: '
' ' ' '
' +--------+ ' pull ' +------+ '
' | origin | ' ------> ' | repo | '
' +--------+ ' ' +------+ '
' ' ' '
+ - - - - - -+ +- - - - - +
ローカルリポジトリの更新を、リモートリポジトリに反映させる。
+ - - - - - -+ +- - - - - +
' remote: ' ' local: '
' ' ' '
' +--------+ ' push ' +------+ '
' | origin | ' <------ ' | repo | '
' +--------+ ' ' +------+ '
' ' ' '
+ - - - - - -+ +- - - - - +
git
管理下のディレクトリのファイルには3つの状態がある。
リポジトリと比べて、ファイルが変更された状態。
変更を実際にリポジトリに反映させるために、変更にされたファイルに印をつけた状態。
ファイルの変更が、リポジトリに反映された状態。
+----------+ add +--------+ commit +----------+
| modified | -----> | staged | --------> | commited |
+----------+ +--------+ +----------+
変更されたファイルにstaged
の印をつける。
staged
なファイルの変更を、リポジトリに反映させる。
他のユーザーのリモートリポジトリを、自分のリモートリポジトリとしてコピーする。
+ - - - - - - - - - - + + - - - - - - - -+
' someone's remote: ' ' your remote: '
' ' ' '
' +-----------------+ ' fork ' +------------+ '
' | origin0 | ' ------> ' | origin1 | '
' +-----------------+ ' ' +------------+ '
' ' ' '
+ - - - - - - - - - - + + - - - - - - - -+
フォークしたリポジトリの更新を、フォーク元に反映させるためのリクエストを送る。
+ - - - - - - - - - - + + - - - - - - - -+
' someone's remote: ' ' your remote: '
' ' ' '
' +-----------------+ ' pull request ' +------------+ '
' | origin0 | ' <------------- ' | origin1 | '
' +-----------------+ ' ' +------------+ '
' ' ' '
+ - - - - - - - - - - + + - - - - - - - -+
フォーク元のリポジトリをupstream
として登録する。後はfetch
してmerge
すればいい。