Version Control CS440 Introduction to Software Engineering John Bell Based on slides prepared by Jason Leigh for CS 340 University of Illinois at Chicago Version Control Incredibly important when working in teams, or whenever multiple versions of a project need to be retained, recovered, and generally managed. Many tools for this: Revision Control System (RCS), Subversion (SVN), CVS, GIT etc. Ref: http://en.wikipedia.org/wiki/comparison_of_revi sion_control_software Pro Git online book: http://progit.org/book/ All CS 440 project teams will use git from a CS server: marvin.cs.uic.edu 1
How Previous Version Control Systems Worked E.g. SVN, Perforce, CVS Create a central repository for holding code. Upload initial codes to repository. Checkout codes to either read or modify. Edit codes. Commit edits to the repository. ( Check in ) Multiple users can checkout codes for reading, but only one at a time can checkout for editing. How Git Works Git is a distributed system. When you work on code as part of a group, you CLONE a remote repository. Git can also be used as a local repository system, for a single developer to archive multiple versions of a project. When you commit your changes you do not need to be networked to the repository server. You can push your updates later. I.e. you work with your local repository. Git has the notion of staging areas that are used to mark files that will get committed. This is really just the list of files that are monitored by git as part of a project. If you modify a file but do not stage it, it will not get committed. I.e. not all files in working directory are in git Git makes it very easy to create and switch code branches so you experiment with code ideas without damaging the main branch. 2
( control list ). Create / edit files git add git init create local project OR git clone create local copy Remote repository git commit git push copy back to origin Setup Git on Your Computer Go to: http://git-scm.com/ Download and install GIT for your platform. ( Right-click on directory and select git bash ) In Terminal Window: git config --global user.name John Bell git config --global user.email jbell@uic.edu ( These instructions are for using git via the command line. There are also interactive versions available. ) 3
Grab the Initial Git Repository Right click on parent directory where you want to work Select git bash to open a bash shell In Terminal Window: git clone groupname@marvin.cs.uic.edu:~/develop.git It will ask for a password- use the one provided. Repeat for Code.git ( or other repositories provided. ) This procedure will create twoa subdirectoriesy under the initial parent Code and Develop and configure themit for use with git. If the remote repositories are not empty, it will populate the directories with files from the repositories. ( I.e. It will set up working directories. ) NOTE: this is assuming you are using a remote repository. If instead you just want to create a git repository for yourself on your own computer, then you do: git init Add A New File Create the file you wish to add, e.g. overloading.cpp In Command Line Window: Let Git know: git add overloading.cpp Commit the file: git commit git will ask you for a comment. Use vi style editing commands Or use git commit -m message to use message as the commit comment. Push this file to the repository: git push origin master Origin refers to the remote repository Master refers to the master branch of your source code 4
Merging When multiple people have cloned a repository, made edits and now want to push their edits, git push will fail. You will need to: git fetch to get the new changes git merge origin/master then merge the two to form a wholly new master. Then finally: git push origin master See: http://progit.org/book/ch5-2.html Branching Lets say you want to experiment with a code idea and so you want to spin off a separate branch from the Master branch. You can use: git branch mynewbranch create the new branch git checkout mynewbranch switch to the branch From now on all mods to your code occur in the new branch. If you want to switch back to Master branch: git checkout master Now lets say you want to merge your codes with the changes your partner has made: git checkout master switch back to master branch git fetch fetch the remote mods git merge master merge with your master git merge mynewbranch if desired merge with mods in your special branch 5
Git In Depth Pro Git online book: HIGHLY RECOMMENDED http://progit.org/book/ Git Cheat Sheet git config set up git init do this if you plan to create your own local repository git clone from repository do this to bring in a remote repository git add files add files to staging area to mark for commit git commit commit the file git push origin master push the committed files to remote origin s master branch git log - show log of changes made to repository. git status - show current status of tracked files, e.g. uncommitted changes. Second person does git clone as well makes his changes tries to do push but fails must do a git fetch fetches latest updates from repository git merge merges the versions git pull does git fetch followed by git merge. git push origin master pushes it back to the server 6
Advice for using git git is best suited for projects in which different developers are working on different ( groups of ) files. It also works well for a single developer to keep track of multiple versions of his/her work, with either a local or remote repository. It is not as well suited for multiple authors collaborating on a single document. See the next slide for MS Word instructions. Using MS Word Collaboratively 1. All members of a team start with identical copies of a document, e.g. a first draft. 2. Each coauthor turns on track changes, on the Review tab of MS Word. 3. One editor collects all revised versions, and uses Review->Compare->Combine to merge the changes into one document. 4. Then the editor can step through all the proposed changes, and individually accept or reject each one. ( Does not require step 3. ) 7