forkしてcloneしてbranch切ってpullしてcommitしてpushしてpull requestしてmergeしてもらおう
この記事のタイトルの意味を理解できるように、プログラマーに必要不可欠な、gitとそれを用いたソースコード管理サービスgithubについてまとめます。
Gitは分散型バージョン管理システム
バージョン管理システムには集中型と分散型がありますが、gitは後者のシステムを採用しています。
集中型では、一つのネットワーク上のrepository(貯蔵庫・倉庫)を共有し、そこにソースコードを保管します。チームメンバーそれぞれがファイルをコピーし、手元で編集、commitすることでソースコードを更新していきます。
それに対し、分散型では、ネットワーク上のremote repositoryを自分のマシンにlocal repositoryとして丸々コピー(clone)します。一度cloneしていれば、ネットワークに繋がっていなくてもlocal repository内でソースコードを更新することができます。他にも集中型と比べて利点がいくつかあります。
branchを切る
バグ修正中のバージョンとリリース版をごっちゃにしたくない時、新機能を追加したいがテストをきっちりやってからリリースしたい時、リリース版とテスト版を枝分かれさせましょう(branchを切る)。branchをmasterに統合することをmergeと言います。
forkする
他人のrepositoryに対して、許可されない限り、そのソースコードを書き換える権限はありません。 しかし、forkすると書き換え権限のあるremote repositoryが作られます。
さらに作られたrepositoryをcloneして、自分のマシン内にlocal repositoryとして保存します。 そこからbranchを切り、ソースコードを編集、変更点をcommitしてlocal repositoryに反映させます。
変更が反映されたlocal repositoryを、remote repositoryにpushすることで、remote repositoryのbranchにも変更点を反映させます。そして、最後にremote repositoryのbranchを統合してくれ!と、fork元のrepositoryへpull requestを送ります。
fork元の管理者がこのpull requestを承諾し、mergeすれば、めでたく自分が変更したソースコードが書き換え権限のなかったrepositoryに反映されるのです。
まとめ
clone => remote repositoryをlocal repositoryへ。
branch => branchを切ることで現行バージョンから分岐、枝分かれしたバージョンを作る。
commit => ソースコードを編集し、repositoryに保存。
push => commit内容をremote repositoryに反映させる。送るイメージ。
pull => remote repositoryの差分をlocal repositoryに反映させる。引っ張ってくるイメージ。
fork => 書き換え権限のないrepositoryを複製し権限のあるrepositoryを作る。
pull request => branchを切って書き換えたコードをfork元の権限者にpullしてくれ!と見せる。
merge => branchを統合する。masterとbranchの統合だけでなくbranch同士の統合も可能。