For developers, regardless of SVN or Git, he would need similar things:
- A local working directory where he can work on his stuff undisturbed for a certain period
- He needs to constantly look out for changes in the remote repository in case the files he is working on has been changed by others
- he would want to commit his changes to the remote repository if:
a) the changes are complete
b) If there are too many changes, he may want to commit the changes that he is fairly certain (in his best knowledge) that is not going to be changed or not going to be used by others soon or not going to break something; because if he changes something which is picked by someone else, if he is later going to change them again, he will impact others.
I’ve written several scripts to simulate two developers using Git. To make things easier, dev1 is the luck one, he always gets to commit his changes earlier. dev2 is the one who we feel sympathy for, as he is the one always runs into conflicts. We will see how dev2 uses different approaches to handle his daily work.
Every script starts out the same: it will create an empty repository in Github, and create two local repositories for the two developers. Afterwards, it will act as two developers, update files and commit the changes to the Github repository. In the process, it will create conflicts for dev2. After each significant step, the script will stop and ask you to check your local repository, so you can understand what each git command does:
To understand what each git command does, I find it is best to use a UI, I recommend using a free tool SourceTree. Add the local repository created by the script into SourceTree:
So now it is clear what the script does and how you should use it. Let us start the day for the two developers.
dev1 checks out a local branch t1, and commits two changes to it:
dev2 does a similar thing, he checks out a local branch t2, and commits two changes to it:
Why do these developers want to check out a local branch instead of working directly on the local master branch?
Because the remote branch will be constantly changed, the local master branch is supposed to be a mirror of the remote master branch, if the local master branch is to be synced up with the remote master branch, the developers’ work will be constantly interrupted. Developers will be working on their local branch, sync up their local master with the remote master, compare their local branch with the local master branch, and decide to syncup their local branch with the local master branch when they feel need to.
So far, everything is fine, there is no drama. Drama comes later.