Sample solution
First we'll walk through what happens at each of steps 4-7
then use that as the basis for our answers
(step 4) Dev-C does a git pull, but nothing has changed in dev so pull says up-to-date
(pull's 'up-to-date' check is only commenting on whether the source we're
pulling from has changed).
Dev-C does a push, which updates the content in dev.
(step 5) Dev-B does a git pull, which brings in the changes Dev-C pushed earlier.
These changes conflict with the changes B made in step 3,
so B must resolve the conflict.
Dev-B does a push, which updates the content in dev
(step 6) Dev-A doesn't do a git pull, and instead tries to push immediately.
git actually rejects the push, telling A there would be a conflict,
so effectively A can't get their content into dev without doing
the pull first (or applying dangerous options to override).
When A relents and does the pull they'll have to resolve conflicts
for the same reason as B in (step 5), after which they could push.
(step 7) Dev-C does a pull, which brings in the changes pushed earlier by B
(and those by A if A got around to doing the pull-then-push).
This does not create a conflict since C has not changed X since
they last pushed (step 4).
Thus the answers to the questions are
(i) step 4: C gets the 'up-to-date' message in their first pull
(ii) step 7: C gets new content but no conflict in their second pull
(iii) step 5: B gets a conflict during their pull
(iv) step 6: A gets a conflict when they try to push without pulling
(the push is thus denied and they are forced to pull *then* push)
|