会社と自宅で、Gitのブランチを共有する

こんにちは!武藤です。

子育てしながら働くと、子供の病気などの理由で、会社と自宅の両方で作業をすることが多くあります。ちょうど今日も娘のおたふくかぜ疑惑で自宅作業です。

初めてGitを使い始めたころ、どうやって会社で作った自分用の作業ブランチを自宅のパソコンに取り込むのかわからず失敗を繰り返しました。 初心者ゆえに何から調べたらいいのかわからず、「Git、会社、自宅、ブランチ、共有」などと検索しましたが、欲しい結果は出てきませんでした。
同じように悩むGit初心者がいるかもしれないので、詳しくまとめておきます!

会社のパソコン、自宅のパソコンの両方で、リモートリポジトリの取り込みは終わっているという前提で進めます。 過去の記事で、Bitbucketのリモートリポジトリをローカルリポジトリに取り込む方法を書いているので、まだ取り込んでいない方は、ご参照ください。
参考:Git BashでSSH鍵(キー)を作成し、Bitbucketとつなぐ

以下の場合の解説をしていきます。

会社と自宅のパソコン
【PC1】:1台目のパソコン(先に作業を行うパソコン)
【PC2】:2台目のパソコン

ブランチ
master:統合ブランチ
dev/hoge-hoge:個人の作業ブランチ

【PC1】、【PC2】の2台のパソコンの作業ブランチに、共通の追跡オプションの指定をすることがポイントになります。

初回【PC1】:
自分用の作業ブランチを作成し、追跡オプションの指定をする

(1) 自分用の作業ブランチを作成

git checkout -b dev/hoge-hoge

hoge-hogeは、例えば、このブログの更新用なら、blog_git-2pcなど、わかりやすい名前を付けます。

チェックアウトをしている例

このように、チェックアウトしている作業ブランチ名が表示されます。

(2) 最新の取り込み

git fetch origin
git merge origin/master

Git運用のテストを始めたころは、git rebase origin/masterとしていましたが、グランフェアズのホームメンバーで検証して話し合い、現時点ではgit merge origin/masterというルールになりました。
rebaseとmergeの違いについては、たくさんの記事が公開されていますので、ググってみてください。

(3) 作業ブランチに作業内容をコミット

作業単位で細かく記録しておくと後で便利です。
addのオプションはたくさんありますので、ここでは割愛します。
例:「git add .」にすると、カレントディレクトリ以下のすべての変更がaddされます。

git add <オプション>
git commit -m "<コミットメッセージ>"

(4) リモートに作業ブランチをpush

ブランチを作成した初回のみ、追跡オプションの指定をします。

git push -u origin dev/hoge-hoge

これで、作業ブランチ(dev/hoge-hoge)をリモートの作業ブランチ(dev/hoge-hoge)に追跡させることができるようになり、ローカルにリモート追跡ブランチ(origin/dev/hoge-hoge)ができます。
リモート追跡ブランチは、リモートの作業ブランチの更新を見て、git fetchで最新を取り込むことができるようにしてくれます。

リモート追跡ブランチ説明図【PC1】

2回目以降のpushでは、以下のみです。

git push

作業単位ごとに(3)、(4)を繰り返します。

初回【PC2】:
リモートにある自分用の作業ブランチを取り込み、ローカルの作業ブランチに追跡オプションの指定をする

(1) リモートにある自分用の作業ブランチの取り込み

2台目のパソコンで初回のみ、追跡オプションの指定をします。

git fetch origin
git checkout -b dev/hoge-hoge origin/dev/hoge-hoge

これで、【PC1】で作成したリモートの作業ブランチ(dev/hoge-hoge)を追跡するために、【PC2】のローカルにリモート追跡ブランチ(origin/dev/hoge-hoge)を作成し、【PC2】のローカルの作業ブランチ(dev/hoge-hoge)に取り込むことができるようになります。

リモート追跡ブランチ説明図【PC1,PC2】

自分の作業ブランチを2台のパソコンで共有する準備ができました。

(2) 作業ブランチに作業内容をコミット

git add <オプション>
git commit -m "<コミットメッセージ>"

(3) リモートに作業ブランチをpush

git push

【PC2】で行った続きの作業をリモートの作業ブランチにpushすることができました。
作業単位ごとに(2)、(3)を繰り返します。

2回目以降【PC1】【PC2】共通:
最新の情報を取り込み作業の続きを行う

(1) 自分用の作業ブランチに切り替え

git checkout dev/hoge-hoge

(2) 最新の取り込み

git fetch origin
git merge origin/dev/hoge-hoge

これで、リモートの作業ブランチが取り込めます。
自分が作業を進めている間に、masterもどんどん更新されている場合、masterの最新も取り込みます。

git merge origin/master

(3) 作業ブランチに作業内容をコミット

git add <オプション>
git commit -m "<コミットメッセージ>"

(4) リモートに作業ブランチをpush

git push

作業単位ごとに(3)、(4)を繰り返します。

この方法を応用すれば、自分の作業ブランチに、他のメンバーが修正を加えることもできます。
他のメンバーが【PC2】の設定を行うことになります。

まとめ

ブランチの切り方、その取扱いについては、Git運用の中でルールをしっかり決めておくことが大事です。
グランフェアズでは、テスト運用時に練習と失敗を繰り返して、本格的なGit運用を始める前にプロジェクトチームで話し合い、ルールを決めました。
プロジェクトの規模や、関わる人の数やスキルによっても変わってくるので、経験を積みながらより良い方法を模索していきたいと思います。