User Tools

Site Tools


svn

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
svn [2007/03/27 14:34] damirsvn [2011/02/18 15:14] cangiani
Line 1: Line 1:
 ====== Subversion ====== ====== Subversion ======
  
-Subversion is an open-source control version system that is a compelling replacement for CVS. At least the client version is installed by default on all our Linux machines, and can be easily installed on Macs via [[http://fink.sf.org|fink]] or [[http://www.macports.org|macports]]. +Subversion is an open-source control version system that is a compelling replacement for CVS. At least the client version is installed by default on all our Linux machines, and can be easily installed on Macs via [[http://fink.sf.org|fink]] or [[http://www.macports.org|macports]].\\  
-The basic idea is to keep a master copy of your source files in a //repository// where the subversion also keeps track of all the (committed) modifications to the files. +The basic idea is to keep a master copy of your source files in a //repository// where the subversion also keeps track of all the (committed) modifications to the files. For editing a file, one have to check it out (e.g. get a local copy) from the repository.\\  
-For editing a file, one have to check it out (e.g. get a local copy) from the repository. Once the editing is done, the modifications are committed back to the server. This allows more than one person (or the same person on many computers) to work on the same set of files because they are actually working on their local copy of the files. +Once the editing is done, the modifications are committed back to the server. This allows more than one person (or the same person on many computers) to work on the same set of files because they are actually working on their local copy of the files.\\  
-When a user commits his changes, the files he has been editing might have been changed (and committed) by another user in the mean while. In this case, subversion merges the changes automatically unless it detects a conflict (e.g. two user having changed the same line of code).+When a user commits his changes, the files he/her has been editing might have been changed (and committed) by another user in the mean while. In this case, subversion merges the changes automatically unless it detects a conflict (e.g. two user having changed the same line of code).
 Everyone can create his own subversion repository in his homedirectory with the following command: Everyone can create his own subversion repository in his homedirectory with the following command:
 <code> <code>
Line 10: Line 10:
 </code> </code>
 where ''DIRECTORY_NAME'' name could be for example ''/home/cangiani/SVN'' where ''DIRECTORY_NAME'' name could be for example ''/home/cangiani/SVN''
 +===== Standard connection methods for our central repositories =====
  
 For group projects, it is better to use the common repository which is For group projects, it is better to use the common repository which is
-  * for algo: <nowiki>svn+ssh://USERNAME@clusteralgo.epfl.ch/SVN/trunk</nowiki> +  * for algo: <nowiki>svn+ssh://USERNAME@lth.epfl.ch/repos/algo/REPONAME/</nowiki> 
-  * for licos: <nowiki>svn+ssh://username@licos.epfl.ch/SVN/trunk</nowiki> +  * for licos: <nowiki>svn+ssh://USERNAME@lth.epfl.ch/repos/licos/REPONAME/</nowiki> 
-  * for lthc: <nowiki>svn+ssh://username@lth.epfl.ch/lthcsvn/</nowiki> +  * for lth: <nowiki>svn+ssh://USERNAME@lth.epfl.ch/repos/lth/REPONAME</nowiki> 
-  * for lcm: <nowiki>svn+ssh://username@lthiserv4.epfl.ch/</nowiki>+  * for lcm: <nowiki>svn+ssh://USERNAME@lth.epfl.ch/repos/lcm/REPONAME/</nowiki> 
 +  * for arni: <nowiki>svn+ssh://USERNAME@lth.epfl.ch/repos/arni/REPONAME</nowiki>
  
-==== Quick User Guide ====+Where ''REPONAME'' is the name of the repository. You can see a list of repositories with ''ls''.  
 +For example: 
 + 
 +<code> 
 +|~>ls /repos/lth 
 +CDMA introsc scaling 
 +CS iryna scripts 
 +LDPCequal isit05 shortcourse 
 +SourceCoding it2010-11 signalpc 
 +SourceCodingBP iterations sim 
 +aaaaa kr sim.donotuse 
 +abdel ldlc sim1 
 +alsan ldpcdemo sim_zip 
 +ara leshouches sparsematrices 
 +aref limex stability 
 +book mac statphys 
 +cap matlabde statphys2010-11 
 +cdi maxup subroutines 
 +comm maxwell talks 
 +commnet minsum temp 
 +consensus mobility test 
 +corrdecay ncaref test1 
 +coupled netflix testacl 
 +cyclecodes networkcoding testacl1 
 +densevol newintrosc testdamir 
 +density_evolution paris05 thesiskorada 
 +dsp2010-11 pdc treereconstruction 
 +errorfloor polargaussian turbo 
 +flipping polarization turboweight2 
 +gf pspin twod 
 +girthvsdiam puncturing vinodhPhD 
 +gossip racodes vish 
 +graphreconstruction ratesplitting weight_conc 
 +ibm samplede 
 +</code> 
 + 
 +===== Quick User Guide =====
  
 Almost everything is done with the ''svn'' command. In fact it is a //super// command as it accepts many internal commands. Note that in this section, all the lines starting with ''xxxx>'' are commands that I typed in as an example. By ''URL'' , I mean a repository address as, for example ''svn+ssh: USERNAME@licos.epfl.ch/SVN/trunk''. Arguments in square brackets are optionals. All commands that do not need an ''URL'' are going to be used from withing a local copy under version control. Almost everything is done with the ''svn'' command. In fact it is a //super// command as it accepts many internal commands. Note that in this section, all the lines starting with ''xxxx>'' are commands that I typed in as an example. By ''URL'' , I mean a repository address as, for example ''svn+ssh: USERNAME@licos.epfl.ch/SVN/trunk''. Arguments in square brackets are optionals. All commands that do not need an ''URL'' are going to be used from withing a local copy under version control.
Line 26: Line 64:
 **The most common svn commands are:** **The most common svn commands are:**
  
-=== svn help [command name] === +==== svn help [command name] ==== 
 I think you've guessed what it is for. Use it ! I think you've guessed what it is for. Use it !
  
-=== svn list URL ===+==== svn list URL ====
 to list the content of the [remote] repository. For example: to list the content of the [remote] repository. For example:
 <code> <code>
Line 51: Line 89:
 </code> </code>
  
-=== svn checkout URL [localdir] ===+==== svn checkout URL [localdir] ====
 to get a local copy of [part of] the repository. For example, with to get a local copy of [part of] the repository. For example, with
 <code> <code>
Line 60: Line 98:
 will just use the name of the last directory in the repository (in this case "web"). Now that I have my local copy under version control I can run all the following commands. will just use the name of the last directory in the repository (in this case "web"). Now that I have my local copy under version control I can run all the following commands.
  
-=== svn status [-u] ===+==== svn status [-u] ====
 checks the status of my local copy. Without the -u option it only works locally so it does not tell if some of the file was modified in the repository. Still very useful to see what files I have modified. The command output something only if there is something interesting to say. No output means that there are no changes. For each //changed// file flag letters appears on the left (see svn help status for a full list). The most common letters are ''M'' for locally modified, ''A'' for locally added, ''D'' for locally deleted, ''*'' if a newer version exists in the repository, ''?'' if the file is not under version control (either it is a generated file such as a .o or .dvi file, or you just forgot to add it to the repository), ''C'' if there are conflicts (and that's bad). checks the status of my local copy. Without the -u option it only works locally so it does not tell if some of the file was modified in the repository. Still very useful to see what files I have modified. The command output something only if there is something interesting to say. No output means that there are no changes. For each //changed// file flag letters appears on the left (see svn help status for a full list). The most common letters are ''M'' for locally modified, ''A'' for locally added, ''D'' for locally deleted, ''*'' if a newer version exists in the repository, ''?'' if the file is not under version control (either it is a generated file such as a .o or .dvi file, or you just forgot to add it to the repository), ''C'' if there are conflicts (and that's bad).
 For example (this is the algo web site): For example (this is the algo web site):
Line 82: Line 120:
 This tells me that I've modified (M) the file intro.php and that various other files are newer (*) on the repository. This tells me that I've modified (M) the file intro.php and that various other files are newer (*) on the repository.
  
-=== svn update [filename] ===+==== svn update [filename] ====
 take new version of the file (of of all files if no filename is given) from the repository. It can happens that a file was modified on the repository, but also in your local copy. In this case, subversion tries to merge the two version. If it cannot, then a conflict is generated and you'll have multiple copies of the same file. You will need to resolve the conflict by choosing the correct version of the file, and  running ''svn resolved [filename]''. take new version of the file (of of all files if no filename is given) from the repository. It can happens that a file was modified on the repository, but also in your local copy. In this case, subversion tries to merge the two version. If it cannot, then a conflict is generated and you'll have multiple copies of the same file. You will need to resolve the conflict by choosing the correct version of the file, and  running ''svn resolved [filename]''.
  
-=== svn commit -m "mandatory comment about your modifications" [filename] ===+==== svn commit -m "mandatory comment about your modifications" [filename] ====
 commit your changes: send a copy of the files that you've modified back to the server. In case, there are files in the repository that are newer than those being committed, the commit will fail and you will have to first update your copy (and eventually resolve the conflicts). commit your changes: send a copy of the files that you've modified back to the server. In case, there are files in the repository that are newer than those being committed, the commit will fail and you will have to first update your copy (and eventually resolve the conflicts).
  
-=== svn add filename ===+==== svn add filename ====
 schedule a local file for being added to the repository. The file will be actually added only when you commit your changes. schedule a local file for being added to the repository. The file will be actually added only when you commit your changes.
  
-=== svn delete filename ===+==== svn delete filename ====
 schedule a file for "deletion" in the repository. The file is also immediately removed from your local copy. Note that under subversion file are never deleted from the repository. They are only deleted from the current version of schedule a file for "deletion" in the repository. The file is also immediately removed from your local copy. Note that under subversion file are never deleted from the repository. They are only deleted from the current version of
 the repository. the repository.
Line 101: Line 139:
 rename a file or a directory either locally (that is schedule the change for the next commit) or directly on the repository. rename a file or a directory either locally (that is schedule the change for the next commit) or directly on the repository.
  
-=== svn log filename ===+==== svn log filename ====
 prints the history of a file. Each time the file was modified and committed  a new version number (rXXXX) and a the -m "comment" is attached to it. Example: prints the history of a file. Each time the file was modified and committed  a new version number (rXXXX) and a the -m "comment" is attached to it. Example:
 <code> <code>
Line 137: Line 175:
 </code> </code>
  
-==== Few general recommendations ==== +===== Personal Repositories ===== 
-  - try to import into subversion ONLY the SOURCES and not the files that are generated from the sources;+ 
 +you can always create a personal repository in your homedir by doing: 
 + 
 +  - ssh into server: <code>ssh lth.epfl.ch</code> 
 +  - create an empty repository: <code>svnadmin create <name_of_repository></code>  
 +  - use the standard svn subcommands to checkout, list or commit to the repository 
 + 
 + 
 +===== General Repositories ===== 
 + 
 +General repositories, that needs to be available under <code>ssh+svn://lth.epfl.ch/svn<LABNAME>/<REPOSITORY></code> can be created only by the System Administrators.\\ 
 +To create a general repository you need to send an email with these informations: 
 +  - name of the repository 
 +  - list of users that need access to it 
 +  - visibility: 
 +    - Private: The repository can be private (the only way to access it is through the svn commands) 
 +    - Public: The repository can be accessed through the web interface  
 + 
 +===== Few general recommendations ===== 
 +  - try to import into subversion ONLY the SOURCES and not the files that are generated from the sources; use [[makegallery|Makefiles]] for automatically generating dependent files from sources.
   - try to keep the repository as clean as possible. If the repository is shared among various users, it is better to meet once and agree on a common strategy for file/directories naming schemes;   - try to keep the repository as clean as possible. If the repository is shared among various users, it is better to meet once and agree on a common strategy for file/directories naming schemes;
   - Unless you have a good reason, do not commit incomplete or buggy files;   - Unless you have a good reason, do not commit incomplete or buggy files;
 +  - **Important: filesystem compatibility**. Like any other file synchronizer, SVN gets into troubles when you try to synchronize (i.e., checkout or update) a directory where you you make explicit use of case sensitiveness for file names. While filesystems on linux (and most unix variants) are case sensitive, all filesystems on Windog and the default one on Mac OsX are case insensitive.  This means, for example, that file ''fig1.eps'' and file ''Fig1.eps'' are two distinct files under Linux, but they are mapped to the same physical file, and therefore they cannot co-exist under OsX.
  
 +===== Various Tips & Tricks =====
 +==== Global Configuration ====
 +Every user has a personal global SVN configuration file which resides in ''~/.subversion/config''. This file defines options that are valid for all repositories that the user works with. 
  
 +The two most useful options are probably ''global-ignores'' and ''autoprops''. ''global-ignores'' defines a list of filename patterns that Subversion will ignore. For example, you can set it to
 +<code>
 +global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store \
 + .*.swp *.dvi *.aux *.log *.bbl *.blg *.idx *.ind *.ilgglobal-ignores = *.o *.lo *.la #*# 
 +</code>
 +to ignore the specified files. The command ''svn status'' will then no longer display these types of files preceded with a question mark if they are not in a repository.
 +One should be careful with ''*.log'' as its possible there are files other than LaTeX processing files which end in ''.log''. To see which files are being ignored in a given directory, type 
 +  svn st --no-ignore
 +
 +The option ''autoprops'' causes Subversion to automatically set pre-defined properties for files whose names satisfy a given pattern. For example,
 +<code>
 +[auto-props]
 +*.m = svn:keywords=Id
 +*.tex = svn:keyword=Id
 +</code>
 +makes Subversion to automatically set the ''Id'' keyword for all .m and .tex files that are added to a repository. (The ''Id'' keyword tells Subversion that the string ''$Id$'' in a file should be expanded to something like
 +  $Id: sufficiency.tex 372 2008-02-11 16:10:53Z kleiner $
  
 +==== Per-Directory Ignore List ====
 +While the ''global-ignores'' option explained above already covers a lot of cases, there are situations where you want Subversion to ignore a file that you cannot put in the global ignore list. For example, in a directory that contains a tex file, you'll want Subversion to ignore the corresponding ps or pdf files. Since you don't want Subversion to ignore //all// ps and pdf files everywhere, you cannot use ''global-ignores''. However, each directory in a Subversion repository has its own //ignore list//. You can edit a directory's ignore list by typing
 +  svn propedit svn:ignore .
 +(the ''.'' is part of the command; it indicates the current directory). This will fire up an editor (the one defined in the ''$EDITOR'' environment variable), in which you can then edit  and save the directory's ignore list. 
svn.txt · Last modified: 2012/02/17 15:54 by damir