Git/GitHubについてお勉強しましょう。
- GitHubの機能をなんとなく理解する
- 最低限のGitのコマンドを理解する
- プルリクエストを送るフローを体験する
GUIクライアントの Source Tree を使うのがおすすめ。
- 自動的にフェッチしてくれる
- 部分的・一行単位のステージ/アンステージがやりやすい
調べた限り使い勝手の良いGUIクライアントはなかったので、コマンドラインから使う。
$ sudo apt-get install gitGitのクライアント。
$ sudo apt-get install tiggitコマンドを拡張した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すればいい。