SVN:IGNORE

Marqué :

Subversion ignore commands drive me up the wall. Git’s ignore is much easier to use, and consistent.

Here is the process I followed to add svn:ignore to a newly added directory that hadn’t yet been committed to the SVN repo. The magic here is the “-N” flag on the add command, since that stops the recursive add (which would add the git directories), and you can then set svn:ignore afterwards.

svn add active_scaffold_list_filters/ -N
svn ps svn:ignore ".git" active_scaffold_list_filters/
svn add active_scaffold_list_filters/*
svn ci

original : http://davidbolton.net/blog/2008/08/svnignore/

SVN fusion des révisions de trunk dans votre branche

Marqué :

À partir de la branche

svn log

Affiche le numéro de révision lors de la création de ma branche

------------------------------------------------------------------------
r23 | stereosv | 2009-02-17 11:42:28 -0500 (Tue, 17 Feb 2009) | 1 line

creating branch for xyz

Maintenant j'ai besoin de connaître la révision actuelle du trunk. La commande svn update exécutée à partir du trunk retourne la version actuelle.

> svn update
At revision 25.

Dans mon cas, le trunk est à la révision 25... impliquant qu'il n'y a eu que deux commit depuis la dernière fois que j'ai checked out ma branche. Sympa.

Maintenant, il faut transporter ces changements dans ma branche. De retour sur le répertoire de ma branche, il est temps de mettre les numéros de révision.

svn merge -r 23:25 svn+ssh://username@svnserver/home/username/svn/project/trunk

Ce qui est fait est un merge de tous les changements survenus entre la révision 23 (quand j'ai créé ma branche) et la révision 25 (la version la plus récente du trunk) dans le trunk dans ma copie locale.

Maintenant il est temps de check in ma branche, avec les changements mise à jour à partir du trunk.

svn ci -m "Merged trunk changes r23:25 into my branch"

grep recursively through a svn checkout

Marqué :

For files not named on the command line, only the basename is compared to the exclude pattern.

Try one of these:

find * -name '.svn' -prune -o -type f -exec grep -- "MY_PATTERN" /dev/null \{\} +

find * -type f -exec grep --exclude='*.svn/*' -- "MY_PATTERN" /dev/null \{\} +

Substitution de mots clefs dans Subversion

Subversion peut remplacer des mots clefs donnés dans un ou plusieurs fichiers lors du commit. C'est très pratique pour insérer dans les fichiers certaines informations. Les mots clefs suivants sont disponibles:

  • $Date$ : La date du commit.
  • $Revision$ : Le numéro de la révision où le fichier a été modifié pour la dernière fois.
  • $Author$ : Le nom de l'auteur de la modification.
  • $HeadURL$ : L'URL de la dernière version du fichier dans le dépôt Subversion.
  • $Id$ : Un résumé des mots-clefs ci-dessus.

Ajouter ces mots clefs à vos fichiers ne suffit pas. Il faut activer explicitement ce réglage. Pour un fichier donné cela se fait grâce à la ligne de commande:

svn propset svn:keywords "Date Author" mon-fichier.txt

Si vous souhaitez que certains mots clefs soient substituées dans tous les fichiers que vous ajoutez au dépôt, cela peut se configurer dans le fichier ${HOME}/subversion/config. Pour ce faire, votre fichier de configuration doit ressembler à :

[miscellany]
enable-auto-props = yes

[auto-props]
*.php = svn:keywords="Id Author Date"

Subversion Global Ignores

Marqué :

If you’re a Mac OS X user running Subversion on the command line and mounting remote disks you may have run into instances where you want to globally ignore ._*, .AppleDouble, and *:2e_* files. To do this simply open your Terminal and edit your ~/.subversion/config file and look for the line below.

#global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store

Uncomment it by removing the # and add the necessary additional exclusions and it will now look like this.

global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store ._* .AppleDouble *:2e_*

Save it and you’re all set. Now you won’t need to edit your svn:ignore property for every project!

Get SVN file revision

Marqué :

Get the revision of current checkout without the network hit of a call to svn log:

$ svn info | grep Revision | awk -- '{print $2}'
1234

Get the current version of the repo itself (hits the network):

$ svn info -r HEAD | grep Revision | awk -- '{print $2}'
1280

Erreur SVN

il arrive parfois que l'on ne puisse pas commiter des changements dans un dépôt SVN. Le système retourne une erreur du type :

Can't open activity db: APR does not understand this error code

il convient de vérifier 2 choses :

les droits de l'utilisateur

a-t-il les droits en écriture ? vérifier dans la conf authz que l'utilisateur ou son groupe à bien les droits rw

erreurs apache

si ce n'est pas suffisant, il se peut que l'utilisateur apache n'a pas les droits pour créer le répertoire dav, ou bien ne l'a pas créé. Pour diagnostiquer ceci, il suffit de consulter les logs de votre config apache.

[Mon May 25 16:46:04 2009] [error] [client 82.234.111.205] Could not create activity /svn/testtest/!svn/act/3c353ee2-1752-41d3-891c-a3ba35a519a1.  [500, #0]
[Mon May 25 16:46:04 2009] [error] [client 82.234.111.205] could not open dbm files.  [500, #120002]
[Mon May 25 16:46:04 2009] [error] [client 82.234.111.205] Can't open activity db: APR does not understand this error code  [500, #120002]
[Mon May 25 16:46:04 2009] [debug] mod_deflate.c(619): [client 82.234.111.205] Zlib: Compressed 259 to 188 : URL /svn/testtest/!svn/act/3c353ee2-1752-41d3-891c-a3ba35a519a1

pour résoudre ce problème, aller à la racine de votre projet, et créer manuellement le répertoire dav

Le mot "activity" indique bien que c'est un soucis au niveau de WebDAV. En fait, la commande svnadmin des version 1.5.* de subversion ne créé plus le répertoire dav dans le dépôt, à l'instar des versions précédentes. Ce répertoire est utilisé quand vous modifier le dépôt via WebDAV (par http ou https) et sans ça, WebDAV ne fonctionnera pas. Le répertoire aurait du être créé lors du 1er check-in du dépôt, mais il se peut dans de rares conditions que ce répertoire ne se créé pas. Pour résoudre ce problème, il suffit simplement de le créé manuellement.

svnadmin create newproject
mkdir newproject/dav

Attention à la casse dans SVN !

svn: In directory 'C:/Projects/ozclim/source' 
svn: Can't open file 
'C:/Projects/ozclim/source/.svn/tmp/text-base/reefclim.dof.svn-base': \
    The system cannot find the file specified.

Looks like you have two versions of the file in the same repository directory whose names differ only in case (reefclim.dof and ReefClim.dof). To confirm that this is so, list the contents of the directory in the repository with "svn ls url://to/repo/directory"

http://subversion.tigris.org/faq.html#case-change

How do I change the case of a filename?

This problem comes up in two situations. If you're adding files on an operating system with a case-insensitive filesystem, such as Windows, you might find you accidentally add a file with the wrong case in the filename. Alternatively, you may just decide to change the case of an existing file in the repository.

If you're working in a case-sensitive file system, this is no problem at all. Just move the file to the new name, e.g.,

svn mv file.java File.java

But this won't work in a case-insensitive operating system like Windows. In Windows you can accomplish this by copying the file somewhere temporary, deleting the file from Subversion, then adding the copy with the correct case. Or a better way is to perform a move operation with Subversion URLs. Using URLs is recommended, because it will preserve history for the file, and will take effect immediately.

Both ways will leave Windows working copies with problems, however, because Windows can still get confused when trying to update the conflicting filenames. (You'll get a message like svn: Failed to add file 'File.java': object of the same name already exists). One way of fixing the problem is to delete your working copy and check out again. If you do not want to do this, you must perform a two step update.

For each file with the wrong case, the following command will change the case:

svn mv svn://svnserver/path/to/file.java svn://svnserver/path/to/File.java

To update the working copy, change to the relevant directory and do:

svn update file.java
svn update

The first update will remove file.java from your working copy, the second update will add File.java, leaving you with a correct working copy. Or if you had a lot of problematic files, you can update the working copy this way:

svn update *
svn update

As you can see, adding a file with the wrong case is tricky to fix on an operating system that has a case insensitive filesystem. Do try to get it right when you add the file the first time! To prevent the problem from occurring in the first place, you can create a pre-commit hook that calls the file check-case-insensitive.pl. That file lives in the Subversion source tarball, in the directory contrib/hook-scripts.