Changes

Jump to: navigation, search

Hints for Using SVN to collaborate on school projects

1,775 bytes removed, 01:29, 13 February 2012
branches
Under construction<br />This text is a "how to" document to be used with for using a graphical user interface with SVN, like . Graphical user interfaces include* [[RabbitVCS]] for linux or * [http://www.rapidsvn.org/download/release/0.12/RapidSVN-0.12.0-8051.dmg RapidSVN] for Mac or * [http://tortoisesvn.net/downloads TortoiseSVN] for Windows.<br />Help making improve this better document by adding SVN command line commands for examples.
== SVN Basics ==
=== Directory Structure ===
|-- Team_Repository_Account
+--branches
| +-- member-id1 <-- this is the studenta team member's home in within branches
| +-- Task1
| +-- Task2
| +-- member-id2 <-- this is a team member's home within branches
| +-- Task1
| +-- Task2
| +-- Task3
| +-- member-id3 <-- this is a team member's home within branches
| +-- Task1
+--tags
</pre></big>
==== Branches branches ====* '''Branchesbranches''' is a the common place directory for all team members' workspaces. * Each team member should create a their own home directory or '''workspace''' (member-id1, member-id2,...) for his their own development tasks in within '''branches'''. * The Each team-member's should divide their workspace is then divided in 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. Also Note that when When the word '''branch''' is used as a verb, it means copying the whole '''trunk ''' into a subdirectorysub-directory, either in '''Branchesbranches''' or '''tags'''.(This method of development is called [http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.commonpatterns.feature Feature Branching] ==== Tags tags ====* '''tags''' is the directory that holds '''copies''' of successful stages of '''trunk''' during throughout development. (''Also called as '''Milestones''''')* '''tags''' are never modified or edited. ''You may branch the a directory of tag into branches under a workspace and then modify it the branch and apply the changes back to trunk, but you should never change the contents of a tag should never change''* The action of '''branchingbranch''' ing the trunk into '''tags''' is often referred to as a '''release'''.* Most importantly, we We use the '''tags''' directory to submit the work to the professor to be markedfor marking. ''Your professor instructor will specify what are the requirements of a release.** A release is usual usually tagged by a version number like: R0.1, Prj0.2, As1_1.0 ** When a release is due, your instructor will always mark the latest version of that realease will be markedrelease. **: ''If R0.3 is due, and in '''tags''' R0.3, R0.31, R0.32 are presentin '''tags''', then your instructor will mark R0.32 will be marked ==== Trunk trunk ====* '''trunk''' IS is the directory that holds the project at in its current stagedstage, '''complied and run-able'''* '''trunk''' should never be at a hold non-complied stagecompiled code. (usually Usually trunk should be the is an exact copy as (or better than) the last latest version in '''tags)'''.* If the repository only contains one project is done within this repository, then trunk has no project level subdirectory sub-directory and is the root of the project, otherwise. Ifthe repository holds more than one project, trunk is divided into several sub-directories - one for each project to be version-controlled.*: ''In this case Tags should also be divided to , we divide '''tags''' into exactly the exact same project sub-directories as present in '''trunk''''' 
=== Basic Actions ===
To explain basic actions we have to clear A few important facts and terminologyto help clarify the basic actions:*Responsibility One responsibility of a code repository is to keep track of all of the modifications done to a project by different its team members. *:In other words, when a project handled that is tracked by a code repository (version-controlled or in short versioned) , you can track focus on any changes done through during the project's development life of the project; like such as, who modified/added/deleted what and when. You can undo any work or rollback the work to any stage of the development and much more.* SVN is a client/server based repository;*: Which means the code Code is kept on a server and those with members who have access can copy the whole, or pieces parts of the project to their local machines and , work on them the whole or parts and then apply the their changes back to the server. Note that because if this factBecause of the code is kept on a server, one member could may be unaware of the changes make made by another member, unless the first one applies other has applied the changes to the serverand the member has update their local copy.* Merging all the modifications by of different members into the repository is another responsibility of SVN.* a A '''Version-controlled or versioned''' file, is a file that is handled and tracked by a repository ==== import ===='''import''' is to copy non-versioned work (directory) to a repository server.: note that in this case the imported code is on the server and is still NOT versioned on the client machine; to start working on an imported directory, you should fist '''checkout''' the directory from the repository to the client machine.==== export ===='''export''' is to copy the whole or part of a repository into a non-versioned directory on the client machine: This is usually done when you want to either package the project and make it ready for production or when you and to copy a piece of work form one repository to another repository.
==== checkout ====
To '''checkout''' is to copy the code form from a repository server to a versioned directory on the client, so that you can start working on the code.==== branch ====To '''branch''' is to copy one directory on the repository server into another directory on the repository server.: Note that '''branch'''ing the code copies iton '''the repository''' itself and not on the local (client) machine. To work on the '''branch'''ed (copied) code, you must '''checkout''' the directory to which you copied the '''branch'''
==== add ====
To '''add''' is to flag a non-versioned file or directory to be added to the repository server at next '''commit'''
==== commit ====
To '''commit''' is to apply (or that is, to copy) your modifications and additions to the repository server.==== branch ===='''branch''' is to copy a directory (like trunk) into another directory on the repository server.: Note that after '''braching''' the code is copied on '''the repository''' and not the local(client) machine. To actually work on the branched (copied) code you must '''checkout''' the directory after branching.
==== merge ====
To '''"merge"''' is to merge a branched directory back to the original directory; that is, to apply to the original directory those modifications and additions that you have made to your '''branch'''ed directory.: '''merge''' is the opposite of '''branch'''.  ==== export ====To '''export''' is to copy the whole or part of a repository to a non-versioned directory on the client machine: You '''export''' when you want either to package the project, to make it ready for production, or to copy a piece of work from one repository to another repository.==== import ====To '''"merge"import''' merges back is to copy a branched non-versioned work (directory) to the repository server.: Note that although the imported code is on the server, it is still NOT versioned on the client machine. To start working on an imported directory, back you need first to '''checkout''' the original directory to apply from the modifications and additions repository to the branched direcotryclient machine.
== Starting the a Project On SVN ==There are two possibilities ways to initiate a projecton SVN:# Start To start the project from zero#: This is We do this when you we create a an empty project and start to write the code yourselffrom scratch# Start To start the project by continuing an existing work#: This is We do this when you have someone else has started the project started by someone else (i.e. Professorthat is, the professor, other team-members, etc.) and you we want to copy the work into your our own repository and continue the that work.
=== Start the Project from zero ===
For this you should To start from zero, create the basic framework initial code of your project in '''trunk''', '''add''' the code, and then '''commit''' it. These are the detailed steps: # '''checkout''' the project repository in a new directory on your local computer;#:# ''Create a new directory on your local computer, right click on that directory, and then click on '''AddSVN Checkout'''#:# In '''URL of the repository''' type your repository path (svn://zenit.senecac.on.ca/....)#:# Click on ok# If the basic directories (trunk, tags, branches) don't exist, create them and add them by right clicking on them and selecting '''...SVN/add'''.# In 'Commit''trunk''' , create your project, compile it, and run it. (This is how could be as simple as a few empty files or a Hello world application).# Right click on the '''trunk''', select '''...SVN/add''', and then select all of the files you do thiswould like to add to the repository. #:Add only those files that you want to track for modification. Only source and project files need to be version-controlled. We don't usually add binary or executable files to the repository. Add them only if you have a reason for doing so.# Right click on '''trunk''' and select '''SVN Commit''' to commit your work to the repository server.
# '''checkout''' the project repository in a new directory on your computer;
#:# ''Create a new directory on your computer, right click on it and then click on '''SVN Checkout'''
#:# In '''URL of repository''' type your repository path (svn://zenit.senecac.on.ca/....)
#:# click on ok
# If the basic directories (trunk, tags, branches) don't exist create them and then add them by right clicking on them and selecting '''...SVN/Add'''.
# In trunk, create your basic project framework, compile and run it. (this could be as simple as few empty files or a Hello world application).
# Right click on the trunk and select '''....SVN/Add''' again and select all the needed file to be added to the repository.
#: Add only those files that should be tracked for modification; "Those need to be version-controlled". Binary and Executable files are usually not added to the repository; Only add them if you know what you are doing.
# Right click on trunk and select '''SVN Commit''' to commit your work to repository server.
=== Start the project by continuing an existing work ===
For this To continue an existing work, you should have a '''non-versioned''' copy of the basic framework initial code for the your project to initiate it. Then you should copy the framework Copy this code into the '''trunk''', '''add''' and '''commit'''it. This is how it is doneThese are the detailed steps:
# Copy the basic framework initial code into the '''trunk ''' of your repository#: If the basic framework in provided code is available in another repository (namely RepAsay RepoSrc) , you should copy it by '''export'''ing it from RepoSrc into '''trunk ''' of your repository (namely RepBsay RepoDest)#:# '''update''' RepA RepoSrc to make sure that it is in sync with the server.#:# Right click on direcotry the directory with the basic framework is provided initial code in RepA RepoSrc and select "'''...SVN/export"'''.#:# Select the '''trunk ''' of RepB your own repository (RepoDest) and click OK#:#: This will create a "non-version-controlledversioned" copy of the basic framework initial code in RepBRepoDest/trunk# Do any modification needed to make the framework initial code ready for your own work# Right click on RepBRepoDest/trunk and select '''Add''' and . Then choose the files needed to be that you would like "versioned"# Finally, '''Commit''' The the '''trunk ''' to copy the those files to the SVN server.
== Preparing Your Own Workspace for Development ==
Create a home directory in '''branches''' for your development and name that directory with your seneca-id. Then '''branch''' the trunk into the proper workspace in your home directory under '''branches'''. Finally '''update''' your workspace, so that the code is added to your copy of the repository on your machine. These are the detailed steps:
== Preparing Branches/workspace for development ==For this you should create # Create a home direcotry for your development in branches using your seneca-id. Then your should branch the trunk into the proper workspace in your home directory in '''branches'''. Finally you should '''update''', so the new workspace is added to your copy of the repository on your machine. Here is how: # Create a directory and name it with your seneca-id in branches and # '''add''' it the directory to the repository and then '''commit''' branches to update the repository server.# Right click on the '''trunk ''' and select '''...SVN/"Branch/Tag"''' to create a branch for your next task #:* By doing this you This will create your first workspace to start implementation in the project. Fore next step, choose Choose a relevant name for the your assigned task assigned to you, for . For example if your project is writing a text editor an and your next task is to implement "Copy And PastPaste" feature, then the proper a suitable name would something likebe: "CopyPaste" #:* In "To URL" type or select your home dir sub-directory in the '''branches dir, then ''' directory and add "/CopyPaste" to it: (svn://RepoUrlAndPath/branches/yourSenecaid/CopyPaste")
#:* Select HEAD revision or a specific revision if necessary (mostly head revision applies in our case)
#:* Add a proper descriptive message for to inform others to know about what you have done
#:* Click on OK
#: This copies the trunk into a branch so you can start your own implementation, but note that this . This action is done on '''server''' and your local copy of the repository still remains the sameunchanged.# Right click on '''branches''' and click '''SVN update''', this . This will bring download the new branch to your local machine. == working on Working within your branch/workspace own Workspace ==* You can now start implementing to implement your assigned tasks. *: Unlike trunk, since this is YOUR workspace you can leave it an YOUR workspace in any stage state you like. don't forget to comment Comment each and every and each of your '''commit'''s so that later you know which commit belongs to what and also helps your professor knows what to mark your. * '''If you do not comment a COMMIT, it means that it is was minor and does not need to be marked'''* You can work form home, commit your work( make sure you add comment to your commit) and them , come to school , checkout your committed code work and commit , and continue later.* Make sure if If you are working on a public computer, you make sure to delete the your work from local computer, after you have committed it to the repository.
*: <big>'''It is your responsibility to keep your code safe'''</big>
* If you have any problem with your code, and need help, contact your professor, send the path of your workspace. If needed, he can checkout your code see what is wrong with it and , leave comments on it , and commit it. Afterwards, all you need to do is update your repo and read the comments and corrected code. == Merging you your work back to trunk ==After you have done completed your work in within your own workspace and your work code compiles and is compiling and ready to go, to you can merge you your work back to trunk. These are the detailed steps:# Right click on '''trunk ''' or '''trunk/prj''', depending on what you branched into branches # Select "...SVN/Merge" and , select "reintegrate a branch" , and click on next.
# Make sure "From URL" is the branch you want to merge and click on next.
# click Click on "test merge" to see if the merge is done successfullysuccessful.# click Click on "merge" to merge the branch back to trunk# now Now update the trunk to have apply the possible changes applied.# if If there is are any conflict conflicts, click on "...SVN/edit conflicts" and fix the each conflict, save and click on conflict resolved"# check Check the trunk status in your team page on the wiki#:* If the trunk status is "committed" then change it to "being commited committed by your_name"#:* If the trunk status is "being committed by member_name", wait for the commit them to complete their commit and to go to previous step.# commit Commit the trunk and when done, update the truck status to "commited committed by your_name"# if If this commit was worth recording, branch it in the tags directory under a new release. == Q&A == Notes on SVN for GAM666/DPS901==============================<big><pre>Assumptions:------------1 - the name of the local directory for your repository is repository2 - this local directory has three sub-directories - branches (your workspace) - tags (your milestones) - trunk (your successful releases)3 - SVN has been integrated with Visual Studio 2010  Questions and Answers:---------------------- How do I create a Visual Studio 2010 Solution named prg1 in the repository? - Note: Always create the solution in ..\repository\branches (not in trunk)- Open VS- New Project- Location: ...\repository\branches- Name: prg1- Check the Add to Subversion checkbox- Click OK- Would you like to mark prg1 as added to subversion- Click Yes- Create your project files- Compile and run your project- Close the solution- Go to repository/branches/- Open prg1- Right click on prg1 sub-directory- Tortoise SVN > Add- Uncheck prg1/Debug- Uncheck prg1/*.user- Click OK- Click OK- Go up one directory- Right click on branches/prg1- Click OK- Click OK   Which Visual Studio files shouldn't I add to the repository? - Note: files that are not included in the repository are 'unversioned'- Ignore the following files when adding a Visual Studio Solution 2010: *.sdf *.suo *.user *.ncb *.sbr .*log Debug/* Release/* ipch/* obj/* bin/*  
How do I move ..\branches\prg1 into ..\branches\jdoe\prg1 ?
- Note: If you receive a move involves a copy plus a delete- Right click on prg1- Tortoise SVN > Branch"branch/Tag- Edit To URL manually (change /branches/prg1 project must be ancestrally related to trunk/branches/jdoe/prg1)- Add descriptive message - Click OK- Go up project" error, try going into your trunk and right click > merge one directory file at a time. Make sure to ..\branches- Right click on jdoe- SVN Update- Click OK- Right click on ..\branches\jdoe- Tortoise SVN > delete- Click Yes- Right click on .the "show log" button in the merge wizard to get the latest revision for the merge added for you.\branches\jdoe- SVN Commit- Click OK
== Resources == How do I copy a Visual Studio 2010 Solution named prg1 into the repository? - Make a copy of the prg1 solution directory- Paste the copy into ..\repository\branches- Right-click on prg1- Tortoise * [[SVN > add- Uncheck the files that don't need to be added- Click OK- Click OK- Right-click on prg1- SVN Commit- Add a descriptive message- Click OK- Click OK   How do I copy my completed work in branches into trunk? - Right click on the directory in ..\repository\branches to be copied- Tortoise SVN > Branch/Tag ...- Edit the To URL path manually (replace 'branches' with 'trunk')- Add a descriptive message to the text box- Click OK- on success 'Completed ... ' will appear is the notice box- Click OK- Go up to ..\repository- Right click on trunk- SVN Update</pre></big>]]

Navigation menu