読者です 読者をやめる 読者になる 読者になる

forkしてcloneしてbranch切ってpullしてcommitしてpushしてpull requestしてmergeしてもらおう

Git GitHub

この記事のタイトルの意味を理解できるように、プログラマーに必要不可欠な、gitとそれを用いたソースコード管理サービスgithubについてまとめます。

Gitは分散型バージョン管理システム

バージョン管理システムには集中型と分散型がありますが、gitは後者のシステムを採用しています。

f:id:uraway:20151126105753j:plain 集中型では、一つのネットワーク上のrepository(貯蔵庫・倉庫)を共有し、そこにソースコードを保管します。チームメンバーそれぞれがファイルをコピーし、手元で編集、commitすることでソースコードを更新していきます。

f:id:uraway:20151126105756j:plain

それに対し、分散型では、ネットワーク上のremote repositoryを自分のマシンにlocal repositoryとして丸々コピー(clone)します。一度cloneしていれば、ネットワークに繋がっていなくてもlocal repository内でソースコードを更新することができます。他にも集中型と比べて利点がいくつかあります。

branchを切る

f:id:uraway:20151126105800j:plain

バグ修正中のバージョンとリリース版をごっちゃにしたくない時、新機能を追加したいがテストをきっちりやってからリリースしたい時、リリース版とテスト版を枝分かれさせましょう(branchを切る)。branchをmasterに統合することをmergeと言います。

forkする

f:id:uraway:20151126105802j:plain

他人のrepositoryに対して、許可されない限り、そのソースコードを書き換える権限はありません。 しかし、forkすると書き換え権限のあるremote repositoryが作られます。

f:id:uraway:20151126105804j:plain

さらに作られた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同士の統合も可能。