【Git】制作が同時進行するとどうなるの?

複数の Git ユーザーが、 Git 管理されている制作物の編集作業を同時に行った場合
どのようなことが起こるのかを見てみましょう。

Linux 知識の要らない Git 講座 目次にもどる

ストーリー

前回までのあらすじ
「勉強会のプレゼンテーション・ライブを観られるカフェ」
という切り口でカフェの営業を始めることにした A さんは
お店のホームページの基礎部分を自分で作った後、
続きの作り込みを Web ディレクターの B さんにお願いしました。

ビジネスオーナー A さんと Web ディレクター B さん
ビジネスオーナー A さんと Web ディレクター B さん

B さんはホームページを視覚的に作り込んで、中央リポジトリーにプッシュしました。

その頃 A さんは、
「午後の日中はみんな仕事をしているので客足が少なくなるのではないか」
ということに気付き、
ホームページに記載している、お店の営業時間を変更することにしました。

制作物を更新してみよう

A さんの作業用フォルダーで HTML ファイルを以下のように更新します。

<html lang="ja">
    <head>
        <title>Cafe First Knowledge | 都内 カフェ</title>
    </head>
    <body>
        <header>
            勉強会カフェ 「First Knowledge」 オープン! 営業時間:平日 07:00〜13:00, 18:00〜23:00 / 土日祝 07:30〜21:00
        </header>
        Welcome to First Knowledge
        <footer>
            © First Knowledge Cafe
        </footer>
    </body>
</html>

更新内容を確認してみましょう。
HTML ファイルを右クリック → [TortoiseGit] → [差分]

HTML ファイルを右クリック → [TortoiseGit] → [差分]
HTML ファイルを右クリック → [TortoiseGit] → [差分]

すると、更新内容を見ることができます。

営業時間変更の差分
営業時間変更の差分

更新内容が間違っていなければ、コミット・プッシュしてみましょう。
コミットはうまくいきますが、プッシュは失敗します。

プッシュは失敗します
プッシュは失敗します

どうしてプッシュに失敗するの?

この場合、プッシュが失敗した理由は
先に B さんが編集履歴をプッシュしているためです。

エラーメッセージを確認してみましょう。
現段階の知識では全てのメッセージを理解することは難しいので、
重要部分を抽出して解説します。

解決のヒントになる重要部分
解決のヒントになる重要部分
! [rejected] master -> master (fetch first)
Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes before pushing again.

このメッセージを日本語訳すると、大体以下のような内容になります。

リモートリポジトリーにはローカルリポジトリーにない編集履歴が含まれているため、
更新は拒否されました。
これは通常、別のリポジトリーが同じ場所にプッシュすることで発生します。
最初にリモートリポジトリーの編集履歴を統合することで、プッシュできるようになります。

つまり、
リモートリポジトリーにある B さんの編集履歴を A さんの編集履歴と統合すれば
A さんはプッシュできるようになります。

そして、「fetch first」とありますが、
まず Git の「フェッチ」という操作を行うことで、
A さんはリモートリポジトリーから B さんの編集履歴を受信することができ、
編集履歴の統合を行うことができるようになります。

Linux 知識の要らない Git 講座 目次にもどる

タイトルとURLをコピーしました