Open main menu

CDOT Wiki β

Changes

SVN for School Projects

1,051 bytes added, 18:24, 15 February 2012
Svn basic commands
''Work in progress, please help make this page more useful for students''
=What is svn?=
[http://svnbook.red-bean.com/ svn (Subversion)] is a source code repository. It is a program capable of storing the source code of a project and can keep track of all the changes made (contributions) to a project by its developers. We use it to keep track of changes to our source code.
===What svn can do for you?===
svn can* Stores Store your work (source code) safely on a remote server so you will never lose your that work.* Lets Let several students work on the same project at the same time.* Keeps track Track the history of all the work done with history (who have done did what, and when), this . This means that you can:*: undo your work to any of the past stages of the workstage.*: look at different stages of the work and see all compare the changes.*: check other team members' work, their progress , and their contribution.*: ask others for help from others to help you with your work and help others with their work.* Submit a paper -less assignment submission.*: by tagging Once you have tagged your work, your professor can
*:# checkout and evaluate your work
*:# mark your assignment fairly since seeing each student's contribution is tracked.*:# help you with your assignment by commenting and correcting your work remotely.
=Common actions for school projects=
==Kick-start a project (project initiation)==
# create Create a directory to do hold all of your team's work# checkout Checkout the entire repository (the whole thing) into the that directory#: Look and make sure that you have the 3 directories (branches, tags, trunk)# Open the branches directory and create a sub-directory using your login name#: this becomes the root of your own (each students') workshopworkspace
#: ''' note: do not use the operating system's file management to copy, move, etc any of the '''''versioned''''' files
# Do an update on Update the whole repo to see all of the changes from all studentsteam members# branch Branch the trunk into a sub-dir of your workshop workspace (name the this sub-dir using with your assigned task)#: the verb branch as verb, means copy (in the repository)You are good to go to - you can start working on your repositorytask
==Start working on a project (Start start a new task)==# If you have not already branched the trunk:#: branch/tag the trunk into a sub-directoryunder your workspace. Use your task name/description to Name this sub-directory so you can refer to it easily later.# In do your work within your branch/task directory do your work and commit anytime you have something worth committing. Make sure that you comment your commitseach commit. #: '''Note that in your branch you can commit your work even if it is not completeincomplete. In fact, commit your work anytime you are leaving your computer and comment it like: "going for lunch". But again you should only do this is only valid when you are working in '''''YOUR OWN BRANCH''''' # When your task is complete ## Update the repository to get apply all of the changes applied to your local copy## Merge the your changes back to trunk
#: Note that, the merging happens on the local copy and not the repository
# Edit possible conflicts, save and mark them as resolved when done.
# Compile the trunk, test and make sure that the changes are what you want
# In trunk, apply more changes and do debugging if needed.
#: note that this is the only time you do should be doing any work in trunk# When everything is perfect get ready prepare to commit the trunk:## Make sure that you are logged in to IRC.## Go to team page and set the trunk's status of trunk to committing with following info: User ID, email, IRC Nick, time and date## If the trunk's status of trunk is already committing by another user, communicate with them and find out when they are going to be done so you can do your commit.
##: ''Never commit to trunk with out checking and setting the status of trunk in your team page''
## Update the repository
# Commit the trunk
# Edit, save and resolve possible conflicts and go to previous step
# When done, go to the team page and set the trunk's status of trunk back to committed with the same info as before.
==Continue working on a your current task on a new computer (public computer)==
# Checkout only your branch/task
# start working Work on your task and keep committing the changes as you go.# when When done, do final commit, stating noting that the work period is done# Delete the checked-out directory from the public computer.
# '''''Reboot the computer'''''
#: this will remove your userid and pass password if you have chosen chose to save them.#: Note that you are responsible to keep you work safe, if . If someone gain gains access to your code and repository, YOU are responsible for it and its consequences.
==Continue working on a your task (everyday work)==# Update the repository to get the final most recent changes.
# (optional and only if needed:) If trunk is updated by someone else since the time you branched it, you can merge the '''updated''' trunk into your branch to get the latest additions and modifications of trunk in your branch.
# Continue working on your task and keep committing often.
# when done for the timebeing, commit your work and comment, stating at what noting the stage you areof your work.
==Release a your completed task (Submitting submit an Assignment assignment or a Releaserelease)==# This is Do this when a major task is accomplished finished and it is time to present it to your professor.
#: This is not necessarily to hand in a new release. It could be at any time you feel you are one step closer to the end of the project.
# Update and make sure the trunk has the latest modifications.
# Do all possible changes and fixes to make this release final.
# tag Tag (branch) the trunk into a sub-directory in '''tags'''.
#: Name the tagged directory relative to its state (i.e. name it '''R0.4''' and comment it with task name '''Text Editor''')
#: If this is a fix to a previously released trunk, add the release revision after the release number: (i.e R0.41 and comment it as '''Fixed backspace bug in Text Editor''')
# your Your prof will later update the repo on their computer and get the your Release.
=Standard svn tree structure=
==== branches ====
* '''branches''' is the common directory for all team members' workspaces.
* Each team member should create within '''branches''' their own home directory or '''workspace''' (member-id1, member-id2,...) for their own development tasks within '''branches'''. * Each team member should divide their '''workspace ''' into several sub-directories (workspaces) during the development of the project. These workspaces(Task1, Task2, ...) are usually copies of the '''trunk''' to be worked on.*: ''These sub-directories(Task1, Task2,...) are called branches of trunk. When the The word '''branch''' is used as a verb, it means copying the whole '''trunk''' into a sub-directory, in within '''branches'''.
==== tags ====
* '''tags''' is the directory that holds '''copies''' of successful stages of '''trunk''' throughout the development of the project. (''Also called as '''Milestonesmilestones''''')
* '''tags''' are never modified or edited. ''You may branch a directory of tag into branches under a workspace and then modify the branch and apply the changes back to trunk, but you should never change the contents of a tag''
*: When the word The verb '''tag''' is used as a verb, it means copying copy the whole trunk into a sub-directory, in '''tags'''.* The action of '''tag'''ing the trunk into '''tags''' is often referred to as a '''release'''.
* We use the '''tags''' directory to submit the work for marking. ''Your instructor will specify the requirements of a release.''
** A release is usually tagged by a version number like: R0.1, Prj0.2, As1_1.0
* '''trunk''' should never hold non-compiled code. Usually trunk is an exact copy (or better than) the latest version in '''tags'''.
* If the repository only contains one project, then trunk has no project level sub-directory and is the root of the project. If the repository holds more than one project, trunk is divided into several sub-directories - one for each project.
*: ''In this case, we divide '''tags''' into exactly the same project sub-directories as present in '''trunk'''''
=Svn svn basic commands=A few important facts and terminology to help clarify the basic actions:* A The purpose of a code repository is to keep track of all of the modifications done to a project by its team members. *:*In a project that is tracked by a code repository (version-controlled , or in short , versioned), you can focus on any changes change during the project's development life; such as, who modified/added/deleted what and when. You can undo work or rollback the work to any development stage of the development and much more.
* SVN is a client/server repository;
** Code is kept resides on a server and those members who have access can copy the whole or parts of the project code to their local machines, work on the whole or parts and then apply their changes back to the server.** Because the code is kept resides on a server, one member may be unaware of the changes made by another member, unless the other has applied the changes to the server and the member has update updated their local copy. **: That is why timely and often frequent communication between amongst team members is highly vital for to the project's success of the project. This can is easily be accomplished through the project wiki page (team page) and IRC* A code repository manages the merging the of modifications of different members' code. However When this may fail and as a result fails, the repository will sometimes be in a conflict state.*: * Conflicts can be easily be edited, saved , and resolved using the tools provided by SVN.* A '''Versionversion-controlled or versioned''' file is a file that is handled and being tracked by a repository.
<hr>
* For all the command lines below, note that if If the userid and password is are not set to be saved in svn, then you need to add
<big><pre>
--username stdId --password stpassword
</pre></big>
: to the end if each svn command. (userid and password '''ISare''' set to be saved by default, make . Make sure to reboot your lab computer for the uid userid and pass password to be removederased)
== checkout ==
To '''checkout''' is to download the code from a repository server as a whole, or partial, partially to a versioned directory on the client, so that you can start working on the code.
*GUI:
# Create a directory on your local machine
svn checkout svn://zenit.senecac.on.ca/repoid local_directory --username stdId --password stpassword
</pre></big>
 
== commit ==
commits (submits) To '''commit''' is to submit the changes in the local files to the repository (on the server)
* GUI
# Right click on the directory or file that you wish to which you made modifications commit and click on '''SVN Commit''' # In the Commit Dialog box write enter a short description (a few words) to explain explaining what is you have modified and is being committed are committing and then click on okOK.
* Command Line
<big><pre>svn commit locdir\branches\stdId\SomeDirectory
<big><pre>svn commit locdir\branches\stdId\SomeDirectory\somefile.cpp
-m "Added comments to foo() is somefile.cpp"</pre></big>
'''''IMPORTANT: committing as often as you can makes you visible and shows that you are actively working on your project. When working on your branch, commit as often as you save your work, and comment your commits as much as you can. A consistent and regular number of commits per week is the best demonstration of your commitment to your project.'''''
 
== update ==
Downloads To '''update''' is to download and applies apply the modifications made by others from to the repository (on the server) to the local files (on your own computer)
* GUI
*: Right click on the directory or file (that you want it to be updated) update and click on "SVN update"
* Command Line
: while in the local directory
<big><pre>svn update</pre></big>
: OR from anywhere<big><pre>svn update LocalDirecotyPathLocalDirectoryPath</pre></big>: OR for a single file<big><pre>svn update LocalDirecotyPathLocalDirectoryPath/somefile.whatever</pre></big> == branch/tag ==To '''branch'''ing or to '''tag'''ging ==To branch or tag is to '''copy''' one directory into anotheron the server. The purpose of the copying dictates calling it this action either a '''branch''' or a '''tag'''.*To '''branch''' is to '''copy''' into the '''branches''' directory or one of its sub-directories for further development*To '''tag''' is to '''copy''' into the '''tag''' to directory as a release of the next stage of your project (also called to release a milestone)
*GUI, Branching
# Right click on '''trunk''' in your local repository files and under the "TortoiseSVN" sub-menu click on "Branch/tag"
# Click on the button at right side of '''To URL''' and to browse and find your '''workspace''' under '''branches ''' directory (ie.eg. ''svn://zenit.senecac.on.ca/oop344_113repXX/branches/stdId'') and select itthat '''workspace'''.# Add the branch task name (that is usually the name of the task to do) to the end of the selected path: ''svn://zenit.senecac.on.ca/oop344_113repXX/branches/stdId/'''nameOfTask'''''# In '''Log message''' type ''"Branching to do what ever task that is to be donenameOfTask"''# Leave the rest of the options to remain as they are and click on okOK.#: This will make a copy of trunk under your within '''workspace/nameOfTask''' on the server.
*GUI, Tagging
# Right click on '''trunk''' in your local repository files and under the "TortoiseSVN" sub-menu click on "Branch/tag"
# Click on the button at right side of '''To URL''' and to browse and find your the '''tags''' directory (ie.eg. ''svn://zenit.senecac.on.ca/oop344_113repXX/tags'') and select itthat '''workspace'''.# Add the tag name (that is usually a release id like R0.6) to the end of the selected path: ''svn://zenit.senecac.on.ca/oop344_113repXX/tags/'''R0.X'''''
# In '''Log message''' type ''"Tagging release whatever"''
# Leave the rest of the options to remain as they are and click on okOK.#: This will make a copy of trunk under your within '''tags/R0.X''' on the server.'''''Note that this will happen on the server; therefore to actually have this applied your local copy, you should update your repository (for this see [[#update|Update]])
* Command Line, Branching
<big><pre>svn copy svn://zenit.senecac.on.ca/oop344_113repXX/trunk
svn://zenit.senecac.on.ca/oop344_113repXX/branches/stdId/nameOfTask
-m "Branching to work on whatever tasknameOfTask"</pre></big>#* Note that the : This type of branching we use in here is called a [http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.commonpatterns.feature Feature Branch]
* Command Line, Tagging
<big><pre>svn copy svn://zenit.senecac.on.ca/oop344_113repXX/trunk
svn://zenit.senecac.on.ca/oop344_113repXX/tags/R0.6
-m "R0.6 is released"</pre></big>
'''''Note that branching or tagging occurs on the server. Therefore to have this action applied to your local copy, you need to update your repository (for this see [[#update|Update]]) == Merge merge ==To '''merge, ''' is to merge back integrate the changes made in a branch in the '''branches''' directory back in the '''trunk''' directory.
*GUI
# First [[#update|updateUpdate]] the whole repository.# Right click on '''trunk ''' and then in '''TortoiseSVN''' sub-menu click on '''merge'''# In merge options, select the second one that is '''Reintegrate a branch''' and then click on next# In '''From Url''' browse and find the branch you just sub-directory under '''branches''' with your completed your task on and then click on nextNext. (ie.eg. svn://zenit.senecac.on.ca/oop344_113repXX/branches/stdId/nameOfTask)#: If browsing is not available you can use the '''repo browser''' to find the path to the branch sub-directory and copy and paste it.# Before merging you can click on test merge to run a simulation and see if the merge is successfulsucceeds# click Click on merge to merge the branch back into trunk. #: note that the merging is happening occurs on your local copy of the code and not in the repositoryon the server
# Edit and resolve possible conflicts
# Compile and test the merged trunk# communicate Communicate with other team members and to make sure that no one else is committing to the trunk.# '''[[#commit|commitCommit]]''' the your changes to trunk # Note others Notify other team members that the you have finished your commit is done!
*Command line
#Follow all the precautionary steps stated above and then:
<big><pre>
cd locdir
svn merge --reintegrate
svn://zenit.senecac.on.ca/oop344_113repXX/branches/stdId/nameOfTask
-m "merging back the comments nameOfTask to trunk"
</pre></big>
* # Compile and test the trunk
<big><pre>
svn commit -m "committing comments added to CFramework done on nameOfTask"
</pre></big>
 
=Resources=
== Demo ==
* Here is a [http://www.youtube.com/watch?v=ANFTtpGSOgM video demonstration] for using svn , thanks to [[User:Tvirutthasalam|Thevakaran Virutthasalam]]== Links ==* [http://subversion.tigris.org/ Subversion (SVN)]* [http://subversion.apache.org/packages.html Subversion (SVN) Binary Packages]* [http://tortoisesvn.net/downloads Download Page of TortoiseSVN]* [http://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html TortoiseSVN Documentation]* [http://svnbook.red-bean.com/ SVN book at red-bean.com] or download [https://cs.senecac.on.ca/~fardad.soleimanloo/oop344/notes/svn-book.pdf the PDF from here].* [http://www.rapidsvn.org/download/release/0.12/RapidSVN-0.12.0-8051.dmg RapidSVN] a SVN Client for Mac* [http://ankhsvn.open.collab.net/ AnkhSVN - Free Visual Studio SVN Integration Alternative To VisualSVN]