I never used source control before this class. In Lab01, when I got started on it, I thought it was just a repository and my partner and I could put our work into the same place, and then the TA could check our work from there. During Lab01, we were learning the basic command of svn(Subversion), a popular source version control system like CVS. I found that svn was very complicated and that I did not see any advantage when using it. It takes us lots of time to build a workspace and checkout. However, while deeply studying, I found I am totally wrong, since svn is actually pretty helpful and easy to use.
First of all, a source version control system is not only a simple repository, but a place that can store all the various revisions of the ideas that we commit. Therefore, it provides a project-wide undo button that we can easily roll back. For example, in Lab05, we erroneously replaced our source code "readInput.cpp" file by an automatically generated one. We were so worried at first about it, but it was svn that we were using. Consequently, we typed "svn revert readInput.cpp" in the command line to revert the local changes to the file.
I think the most beneficial feature of Subversion for us is that it allows us to edit files, same or different, in different places at the same time. For example, after checking out the files from the repository to my laptop, I can work without the CSE lab machines. So can my partner. Therefore, we do not need to schedule and find a place to work together all the time. We usually just split our workload and then work on our own time. Using update can help us get the latest files from the repository while using commit can help us submit our changes. Also, any conflict of editing the same files is easy to handle since version control provides a good conflict resolution system. For instance, sometimes I add small changes to our programs, just testing the functionality in my workspace, but do not commit the changes. Before my next update, Keng may have already edited the same files. It doesn't matter, because when I updating, svn will change the name of every conflict file, and every conflict part in the programs will be marked observably.
Our project consists of lots of iteration. The same files may have different revisions. Tags help us keep track of these files which are from different iteration. For example, we first work in the mainstream directory. After we finish the iteration, we copy the files to a new directory in the tags, like the "Iteration1", "Iteration2" and "Lab_06" directories that we already have. If bugs arose in one tag, we will just work in the specific tag as if we were working in the mainstream.
In general, Subversion is a really helpful source control system that we cannot work without it.
