I can imagine system of how can multiple programmers work intensive on same codebase in same time.
I think the Version Control System on server should be able to lock one file for editing when one of programmers connected to codebase starts editing it
Live notification about changes in codebase and pushing updated files to others (via notification or automatic updating)
Chatting about changesets on fly, showing commits and diffs (some integrated source history browser like Trac has or similar would be fine too)
Solution integrated with some featured IDE (like Netbeans or Eclipse)
But what is some cheap (perfect would be open source) solution for this?
What systems have you tested and can recommend me to use?
Edit no.1:
Suggested solution doesn't have to provide all functions I wrote in question.
That list is my imaginary list of what could this system have, not a requirements list.
Question is more about how do you solve "multi-user work on svn/cvs/etc.." and what solution you like most.
Edit no.2
Little bit around @thiton comment
It is very important to point out that there exists something called RCS (Revision Control System). From what I know RSC is an ancestor of CVS. CVS as a concept is implemented in svn, git, mercurial, bazaar, etc...
The reason why we moved from RSC to its successors, is that old way of doing things was slowing down and overcomplicating team work. Locking files and releasing them only after end of editing them, is not the way we want to go.
Now as we can reverse changes on a single file (reverting it to given revision number) and so repair our or others faults, there is need for that.
So I striked out the first point on my list (note it's not written down in descending priority order), and thank @thiton to remind me that.
What you ask about is covered by Application Lifecycle Management (ALM) and the plenty of ALM toolkits. Examples of such toolkits:
In addition to all the mentioned tools, I would recommend using following repository structure for subversion repository:
/project
/trunk
/tags
/builds
/PA
/A
/B
/releases
/AR
/BR
/RC
/ST
/branches
/experimental
/maintenance
/versions
/platforms
/releases
This repo structure is focused on following important aspects of version control:
I mentioned this repository structure because it help a lot when such convention exists:
You can do what you want with Subversion (svn). What I like for live notifications is an email sent after every commit with the diff of the change. This seams strange at first but as soon as you get used to it you miss it if it's not available.
Every developer has e-mail and knows how to handle it. If you do not want to be disturbed you simply close your mail client. It works with every tool since it runs on the server. You can find a tutorial on this Question.
I would not lock a file if one developer is editing it. In this case all other developers can't make their changes and everyone get slowed down. This happens quiet fast if you have long helper classes for your business logic.
And do not automatically update the working copy. If you are building your project or changing a file it leads easily to conflicts. In the best case you only have to build it again, but on the worst case you lost all your data since your last commit.
The hook script approach can be done also with git and mercurial, if you prefer a distributed version control system. In that case the hook runs on the repository you elected to be the master.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With