Bonne façon d'ajouter svn: executable

107

J'ai quelques fichiers exécutables avant que svn ne les ajoute. Ils ont la propriété svn: executable définie. Maintenant, quelques autres fichiers ont été archivés sans que le bit exécutable ne l'ait pas, et je veux définir la propriété svn: executable:

$ svn propset svn:executable on *.cgi

Ensuite, je vérifie l'état et même les fichiers avec l'exécutable svn: ont été modifiés:

$ svn diff
Property changes on: a.cgi
___________________________________________________________________
Modified: svn:executable
   - 
   + *


Property changes on: b.cgi
___________________________________________________________________
Added: svn:executable
   + *

a.cgi ne doit pas être modifié. Je veux ajouter le bit svn: executable à définir de la même manière que sur les autres fichiers, mais je ne peux pas comprendre la commande pour le faire.

Jake
la source
2
J'ouvre cette page chaque fois que je ne veux pas taper svn propset svn:executable on (...). Et la réponse à la question devrait être for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done, et il suffit de valider les fichiers modifiés. Puis continuez.
Tomasz Gandor
@TomaszGandor Je pense que vous manquez svn:executablequelque part dans ce deuxième extrait. Peut svn ps svn:executable on $f;- être ?
Keith M
1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - oui, il a été laissé comme exercice au lecteur.
Tomasz Gandor

Réponses:

166

Vous avez raison d'utiliser les commandes d'édition de propriété svn. La propriété est svn: executable.

Pour ajouter le "bit exécutable" dans svn

svn propset svn:executable on <list of files>

Pour supprimer le "bit exécutable" dans svn

svn propdel svn:executable <list of files>

La documentation SVN pour cela se trouve ici.

Dans la mesure où vous ne modifiez pas les exécutables, vous ne modifiez pas l'exécutable (une somme de contrôle le vérifiera), mais vous modifiez le référentiel SVN. N'oubliez pas que SVN révise les systèmes de fichiers, pas seulement les fichiers; Ainsi, une modification des bits de permission augmentera le numéro de révision SVN, même s'il ne s'agit que d'une modification des propriétés d'un fichier (et non d'une modification du fichier lui-même).

Edwin Buck
la source
Quand j'exécute svn propset de la manière indiquée ci-dessus, il les met à "*" mais la manière naturelle définit svn: executable sur rien, mais qui est toujours défini. Je veux que cette propriété soit la même que celles dont le bit exécutable a été défini avant de les ajouter à la subversion.
Jake
2
Désolé pour toutes les modifications, mais si je me souviens bien, le fait de le définir sur n'importe quoi activera le bit exécutable, le supprimant (et éventuellement le définissant sur null ou sur un espace) le désactivera. Pour obtenir la valeur que votre client SVN utilisait, un propget svn peut être utilisé.
Edwin Buck
-2

Voici comment définir la propriété exécutable sur tous les fichiers * .py de mon projet sur lesquels le bit d'exécution est défini. J'exécute cela à partir du répertoire de niveau supérieur

for f in `find ./ -name '*.py'`; do echo $f; if [ -x $f ]; then echo $f 'is executable setting svn:executable'; svn propset svn:executable on $f; else echo $f 'is not executable'; fi; done;
Isaac Jessop
la source
Comment l'attribut exécutable est-il défini sans utiliser propset? Je ne l'ai pas utilisé et, à ma connaissance, personne d'autre ne l'a fait non plus. Il apparaît sur trois fichiers dans le même répertoire et nulle part ailleurs, et il ne semble y avoir rien de spécial à propos de ces fichiers. (Ce sont des fichiers java, pas sh ou exe ou bat ou jar ou autre.)
Jerry Miller
Je crois que si le fichier a le bit exécutable défini lors de son importation initiale, la propriété exécutable svn sera définie.
Isaac Jessop
à peu près sûr que find a un commutateur -perm qui pourrait être légèrement plus élégant que le if / then mais bien sûr, ce serait plus à retenir
Never Sleep Again