プログラミング

githubをチーム開発で使うときの流れ

こんにちは!まさ(@Masao_Sasaki_ae)です!

 

現在プログラミングスクールで2ヶ月目のチーム開発フェーズに入っていて、今回から新しいコマンドを使い始めたり、ブランチの操作やリモートリポジトリの取り扱いについて四苦八苦したので、自分のためにもメモとしてまとめておきます。

 

リモートリポジトリをクローンする

はじめにGitHub上にチーム開発用のリモートリポジトリを一人が作成し、メンバーがそれをクローンします。

リモートとの接続方法については後日追記します。

 

クローンするときは作業したいディレクトリに移動しておきましょう。

$ cd [作業用ディレクトリ名]
$ git clone [リポジトリのURL]

 

作業用ブランチを作成する

メンバー一人一人役割を与えられますので、その役割に応じたブランチを作成します。

ブランチ名はメンバーの名前ではなく、作業名やMVCの名前を入れることで大体どのファイルを触っているのか、名前を見ただけで把握できるようになります。

 

$ git branch [作成したいブランチの名前]

ブランチを作成したら

$ git checkout [作業したいブランチ名]

コマンドでブランチを移動することができます。

 

$ git checkout -b [作成したいブランチの名前]

を入力すると、作成+移動が同時に行えますので、こちらも覚えておきましょう。

ちなみに、この時点ではGitHub上ではまだブランチは作成されていません。

作業をするときはmasterブランチではなく、必ずブランチを切ってそのブランチの中で行います。

 

$ git branch

を行うと、自分が今どのブランチにいるのかがターミナル上に表示されます。

 

ブランチを編集、統合する

現在位置が必ず目的のブランチ内であることを確認しながら作業を進めていきます。

ある程度作業が進んだら定期的にコミットをしていきましょう。

この時の注意としては、現在地が必ずmasterではなくブランチであることに気をつけてコマンドを入力していきます。

 

ステージング

$ git status

ステージングされていないファイルを確認します。

この作業はついつい飛ばしてしまいがちになりやすいですが、意図しないファイルが変更されていたなどがたまにあるので、変更されているファイルが目的のファイルのみになっているか必ず確認しておきましょう。

$ git add .

ファイルが揃っていたらステージングをします。

 

$ git commit -m “[コミットメッセージ]”

続いてコミットメッセージとともにコミットを行います。

 

リモートにpush

ブランチで目的の作業が完了したら、リモートリポジトリに作業結果を反映させる必要があります。

 

$ git push origin [作業中のブランチ名]

pushの宛先は必ず作業中のブランチを指定します。

リモート(GitHub)上にブランチが存在しない場合は、このpushコマンドで指定したブランチ名がそのままリモート上にも作成され、中身もそのまま反映されます。

 

プルリクエスト(プルリク)、マージ(merge)

リモートリポジトリにあるブランチをマスターに統合する作業です。

こちらの操作は全てGitHub上で行います。

 

リモートリポジトリを開くとファイルの一覧の横にブランチの数が表示されているのでそれをクリックして開きます。

次に、現在リモートリポジトリに保存されているブランチの一覧が表示されるので、作業が完了したブランチの右側にある[New pull request]を押すと、チームメンバーにそのブランチないのコードレビューを依頼することができます。

チームメンバーがそのブランチのコードを確認し、問題がなければ[Merge]を押してもらうことで、そのブランチがmasterに統合されます。

 

ブランチは統合された後も残り続けるので、統合後のブランチは基本的に削除していきましょう。

 

リモートリポジトリをpullする

ブランチでの作業が完了しGitHub上でmasterブランチに統合されたら、チームメンバー全員がそのリモートリポジトリの情報を自分のローカルリポジトリにpullする必要があります。

pullを行うときはcheckoutでmasterブランチに移動しておきます。

$ git checkout master

 

自分がmasterブランチにいる事を一応確認しておきます。

$ git branch

 

次にリモートリポジトリの内容をpullします。

$ git pull origin master

 

これで、自分のローカルリポジトリのmasterブランチの情報がリモートリポジトリの内容と同じになりました。

 

しかし、このままではローカルのmasterブランチには最新の情報が反映されましたが、ローカルの作業中のブランチには、以前にpullした際の古いmasterブランチの情報が残っています。

$ git checkout [ブランチ名]

でブランチを切り替えてみると、作業用ブランチにはmasterブランチの変更点が反映されていないことがわかります。)

この作業中のブランチにも最新のmasterブランチの情報を反映させる必要があります。

 

ローカルのmasterブランチと作業用のブランチの情報は常に最新(リモートリポジトリと同じ)に更新をしておく必要があります。

ローカルのmasterブランチ(作業用ブランチ)の情報が古く、最新の情報をpullしていない状態で作業を進めてしまうと、他の人が作った(更新した)ファイルと自分が作業しているファイルの整合性が取れなくなってしまう可能性があるためです。

特にroutes.rbやApplication_controller.rb、schema.rbなどの各MVC共通となっているファイルの変数やアソシエーションに変更があった場合、現在作業中のブランチに影響が出る可能性があります。(逆も然りです。)

自分の作業は完了してリモートリポジトリに作業完了したブランチをマージはしたけど、リモートリポジトリが既に何度も更新されていると、ブランチで作成したファイルが既に古いものとなっていて、エラーを引き起こす原因になりうるというわけです。

ですので、作業用ブランチで作業開始前マージを行う前には一度ずつ

$ git pull origin master

必ず行いリモートリポジトリの更新をローカルに反映させてから作業を行う必要があるということになります。

まず、masterブランチの情報を反映させたい作業用ブランチに移動します。

$ git checkout [反映させたい作業用ブランチ]

 

ここからのやり方は2つあります。

 

git fetch/merge

まず、リモートリポジトリのコピーを最新にします。

$ git fetch origin master

 

次にコピーした最新のリモートリポジトリの情報をローカルの作業用ブランチに反映させます。

$ git merge origin mster

 

これで、ローカルのmasterブランチの情報をローカルの作業用ブランチに反映させることができます。

 

git merge master

作業中のブランチで
$ git merge master

をするとローカルリポジトリのmasterブランチの最新情報が作業中ブランチに反映されます。

 

ちなみに

$ git merge origin master

を行うとorigin/masterにあるリモートリポジトリの最新情報が作業用ブランチに直接反映されます。

 

 

まとめ

チーム開発でのコマンドの手順を記載していきましたが、かなり抜け漏れがあると思いますので、こちらの記事は随時更新していきます。

 

必ず守ることとして

  1. 作業開始前プルリク(マージ)をする前には必ずgit pullをして最新の状態にしてから作業中ブランチの動作を見る
  2. ローカルリポジトリでは必ず作業用ブランチを作成し、masterブランチでは作業をしない
  3. $ git push origin [作業中のブランチ名]

    をするときは作業中ブランチを必ず指定し、絶対にmasterブランチに直接pushをしない

 

この記事が参考になりましたら、記事のシェアやTwitterのフォローをしていただけると嬉しいです。

 

こちらも合わせてどうぞ!

[関連記事3つまで]

ABOUT ME
まさ
まさ
日々の雑感や思いつきをブログとして発信しています。 お役立ていただけましたら幸いです。 何かありましたら、お問い合わせからお気軽にご連絡ください。