Using TextMate for editing Subversion import/commit messages

Marqué :

Q: Is there a way to use TextMate for editing Subversion (svn) import/commit messages? If I set editor-cmd=mate in the subversion config file, TextMate correctly loads the temporary submit-message when doing a svn import/commit from command line, but svn returns directly with error "Log message unchanged or not specified". Subversion is not 'waiting' for TextMate to save or close the file.

--Armin Dressler

A: Try setting editor-cmd=mate -w (or you can set your environment EDITOR variable). This waits until the file is closed in TextMate. See also 'mate -help'.

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!

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.

Faire un import "sur place" dans SVN

Marqué :

Voici commentr transformer des données originales en un espace de travail.

Disons que vous souhaitez faire du répertoire ~/working/toto le ~/repo/project/trunk de votre dépôt.

cd ~/working/toto
svn checkout file:///~/repo/project/trunk .
svn add *
svn commit -m "Initial import"

Vous souhaitez ajouter le répertoire ~/etc ?

svn mkdir file:///~/repo/project/trunk/etc \
        -m "Make a directory in the repository to correspond to /etc"
cd ~/etc
svn checkout file:///~/repo/project/trunk/etc .
svn add apache samba alsa X11 
svn commit -m "Initial version of my config files"

This takes advantage of a not-immediately-obvious feature of svn checkout: you can check out a directory from the repository directly into an existing directory. Here, we first make a new empty directory in the repository, and then check it out into /etc, transforming /etc into a working copy. Once that is done, you can use normal svn add commands to select files and subtrees to add to the repository.