1) Assuming that there is a central repository (this is the case of SVN and CVS, but not necessarily Git, Bazaar, Mercurial, etc.), and person A commits (and then pushes a commit, which simply transfers the diff and commit messages to the central repository ), person B must update it manually.
2) In this case, yes, someone will spend their time. SCM systems (Source Control Management) cannot do anything to cure a team of its organizational problems. This, of course, is an extreme case. In most cases, there will be slight differences (the definition of the minor here is that any particular file should not be completely or partially rewritten) for each commit, and if these changes do not affect the section in which person B operates, the SCM software will be able to combine these commits to one working file.
Another case where two people change the same area of the same file (say, a function). When such a conflict occurs, the SCM software will help you choose which changes you will use, or even allow both of them to be used.
3) A branch is a commit history line:
feature-> /RST master-> ABCDEF bugfix-> \JKLM
Here feature , master and bugfix are branches, and letters are specific commits. For the master branch, the newest commit (the latest version of each file) is F On the other hand, the feature newest branch does T and it only includes commits A and B from the master branch. Any changes made to commits C , D , E and F are not included in this branch. It can be rewritten as:
feature-> ABRST master-> ABCDEF bugfix-> ABCJKLM
Branches are now important for dividing the workflow into different compartments and focusing work on specific parts. Imagine that the master branch is where the stable code is located, and imagine that we are implementing a new function on the feature branch, which is not yet ready for release. Now imagine that the plugin system is changed and important corrections are bound to the master branch, and since the function that I implement depends on the plugin system, I need to pass these commits ( C through F ) to the feature branch. To do this, you issue the rebase command (I use Git here as a guide here) for the SCM software to:
feature-> /RST master-> ABCDEF bugfix-> \JKLM
So now you are done with the feature branch. To pass the commits R , S and T to master you issue the merge command:
master-> ABCDEFRST bugfix-> \JKLM
This is the foundation of the industry. There are many other interesting things you can do for branches. Hope this doesn't take too long and helps: P