Version Control CS440 Introduction to Software Engineering 2013, 2015 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. Many tools for this: Revision Control System (RCS), Subversion (SVN), CVS, GIT etc. Ref: http://en.wikipedia.org/wiki/comparison_of_ revision_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 your code. Upload initial codes to repository. Checkout codes you want to modify. Edit codes. Commit edits to the repository. How Git Works Git is taking the version control world by storm. Git is a distributed system. When you work on code, you CLONE remote repository. When you commit your changes you do not need to be networked to the repository server. You can push your updates later. 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 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 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:~/code.git It will ask for a password- use the one provided. Repeat for Develop.git ( or other repositories provided. ) This procedure will create two subdirectories under the initial parent Code and Develop and configure them 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 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 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 push origin master pushes it back to the server 6