初めて共同開発を体験して、昔の自分がこれを知っておいたら便利だろうと思えることを備忘録をかねて書き記します。はじめて共同開発をする方向けの記事です。
##slackの情報共有はとっても便利
下記記事をご参考ください。
https://qiita.com/unsoluble_sugar/items/e42ac352400598a24915
連携するとGitHubの変更履歴がSlackと同期するのでSlackの掲示板で進捗確認できて便利です。
##まずはブランチを作成しよう
%git checkout -b <ブランチ名>
#branchの作成&切り替えができる便利なコマンド
%git switch <ブランチ名>
#ブランチの切り替えができます。
%git branch -d <ブランチ名>
#ブランチの削除ができます。
%git commit --amend
#push前のメッセージを変更できます。
##事前準備
% git branch
guest_login
* like-post
master
model-test
※がついているコードが現在使っているbranchです。
基本的にmasterブランチを使うことはまずありません。
##いまあるローカルブランチをリモートブランチにくっつける(merge)
まず事前準備、前回のコミットからの進捗をgit pushしてアップデートしてください。
くっつけることをmergeといいます。
%git add -A
#-AはALLの略なので差分が全てコミットとされて困る場合は、更新したい特定のファイルだけを指定する。
%git commit -m "コミットメッセージ"
%git push --set-upstream origin <ブランチ名>
例
ブランチ名がlike-postなら
%git push --set-upstream origin like-post
##リモートブランチ(GitHubのブランチ)をローカルへ持ってくる(pull)
リモートブランチを**pull(プル)**するっていいます。
pull = fetch&mergeのイメージです。
例は以下の設定です。
あたりまえかもしれませんが、半角ブランクをブランチ名とURLの前にあけてください。
現在のローカルブランチにリモートの指定のブランチを合体させるケースです。
リモートのブランチ名:maser
同期したいURL:https://github.com/kyodo/development.git
%git pull URL master
%git pull "同期したいアカウントのURL" <同期したいリモートのブランチ名>
例
%git pull https://github.com/kyodo/development.git master
#1例としての以下のような表示がでます。
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.
remote: Enumerating objects: 36, done.
remote: Counting objects: 100% (36/36), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 18 (delta 13), reused 12 (delta 8), pack-reused 0
Unpacking objects: 100% (18/18), 2.27 KiB | 154.00 KiB/s, done.
From https://github.com/koudaikumazaki/team-development
* branch master -> FETCH_HEAD
Updating 3b43c45..8af03e2
Fast-forward
Gemfile.lock | 2 +-
app/controllers/posts_controller.rb | 34 +++++++++++++++++++++++++++++++---
app/views/posts/edit.erb | 28 ++++++++++++++++++++++++++++
app/views/posts/index.html.erb | 4 ++--
app/views/posts/show.html.erb | 2 +-
5 files changed, 63 insertions(+), 7 deletions(-)
create mode 100644 app/views/posts/edit.erb
##ローカルで更新した情報をリモートへアップデートする
%git add -A
#-AはALLの略なので差分が全てコミットとされて困る場合は、更新したい特定のファイルだけを指定する。
%git commit -m "メッセージ名"
%git push origin <現在のブランチ名>
#または
%git push origin HEAD
#HEADは現在のブランチなので、
#git branch
#で現在のブランチを特定して調べてから
#git push origin "現在のブランチ名"
#と入力する手間が省けて便利。
※git push後に下記が表示されたケースでは、誤って、git push origin HEAD:masterを選択してはイケません!!!!
#筆者はやってしまったことがあるのでくれぐれもご注意を。
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:master
To push to the branch of the same name on the remote, use
git push origin HEAD
To choose either option permanently, see push.default in 'git help config'.
##仲間がつくったbranchを確認する
ただ確認したいだけ、自分のbranchに仲間の作業内容をくっつけ(merge)たくないケース。
担当分野をお互いにチェックする作業の時に使えるコマンドがこちらです。
わんちゃんが飼い主が投げた遊び道具をとってくるイメージがfetch。
%git fetch <リモートブランチ>
%git fetch -a
#aはALLの略です。
#リモートリポジトリの変更をローカルに取り込みます。
%git branh -a
* contact/#2
header/#8
master
romm/#1
#remoteブランチを赤色で表示されます。
remotes/origin/#3
remotes/origin/#5
remotes/origin/HEAD -> origin/master
remotes/origin/access/#6
remotes/origin/areaguide/#4
remotes/origin/contact/#2
remotes/origin/footer/#5
remotes/origin/header/#8
remotes/origin/master
remotes/origin/origin/room/#1
remotes/origin/room/#1
remotes/origin/top/#3!
#リモートブランチから切り替えたいbranchを選択します。
#例としてremotes/origin/access/#6を選択します。
#remotes/origin/を除いたブランチ名でブランチを切り替えます。(スイッチ)
%git switch access/#6
M src/asset/js/hamburger.js
M src/asset/sass/object/component/_hamburger.scss
M src/ejs/_includes/_header.ejs
Branch 'access/#6' set up to track remote branch 'access/#6' from 'origin'.
Switched to a new branch 'access/#6'
#切り替えが完了しました!
参考URLです。
##コミットせずに作業を中断したい時
共同開発では、複数のブランチで別々の実装をする過程でブランチを切り替える必要が多発します。キリが悪いけどブランチを切り替えて確認しなければ、いけない時に使えるコマンドがgit stashです。
%git stash save #saveは付けなくてもいい。
#または
%gitstash save "コメント"
で中断できます。
中断した作業リストは以下のコマンドで見ることができます。
%git stash list
stash@{0}: On #8: ヘッダーの実装
stash@{1}: On #2: first stash
中断した作業をもとに戻すには以下のコマンドを入力します。
#git stash apply [スタッシュの番号名]
%git stash apply stash@{0}
中断した作業を消すには以下のコマンドを入力します。
#git stash drop [スタッシュの番号名]
%git stash drop stash@{0}
stashはとても便利なので使って見てください。
参考URL
##コンフリクトへの対応
共同開発にコンフリクトは、つきものです。
うぁぁぁぁぁっ、コンフリクトだ!!と焦りますが。。。
masterブランチへこのままmergeしたら問題が起きますと、伝えてくれているので焦らずに冷静に対応しましょう。
コンフリクトが起きるとプルリクエスト画面に下記の表示が出ます。
まずは
右上のResolve conflictsボタンを押します。
するとコンフリクトの詳細画面が表れます。
わかりやすくするために、コンフリクト詳細をズームします。
<<<<<<< like
resources :likes, only: [:create, :destroy]
end
=======
resources :comments, only: [:create, :edit, :update, :destroy]
end
>>>>>>> master
#はじめは読むのを戸惑いますが、違いがどこにあるのかを示してくれています。
likeブランチのコード<<<<<<< like から =======まで
maserブランチのコード======= から >>>>>>> masterまで
この部分が違います、コンフリクトの原因だと説明してくれています。
#下記のように修正しました。
resources :posts do
resources :likes, only: [:create, :destroy]
resources :comments, only: [:create, :edit, :update, :destroy]
end
修正が終わったら
commit mergeをクリックします。
すると
This branch has no conflicts with the base branch
とメッセージが切り替わり、無事にコンフリクトが解消できました!!
先輩エンジニアからプルリクの右側にあるFiles changedタブで差分が一覧を事前に確認してから、レビュー依頼をするようアドバイスがありました。意図しない変更によってバグが発生することがあるためだそうです。**「自分が修正した箇所以外は差分が出ないように」**が基本だそうです。
おつかれさまでした。
以上、共同開発で知っておくと便利なお役立ちTIPSでした!!
余談ですが。
Gitで共同開発を知ってみるとCoding以外の分野で応用ができそうに思えてきます。参考例です。
現在、共同開発中なので、補足情報があれば随時更新します!!!!