Richtige Methode zum Hinzufügen von svn: ausführbare Datei

107

Ich habe ein paar Dateien, die ausführbar waren, bevor svn sie hinzufügte. Sie haben die Eigenschaft svn: ausführbare Eigenschaft festgelegt. Jetzt wurden einige andere Dateien eingecheckt, ohne dass das ausführbare Bit es nicht hat, und ich möchte die Eigenschaft svn: executeable festlegen:

$ svn propset svn:executable on *.cgi

Dann überprüfe ich den Status und sogar die Dateien mit der ausführbaren Datei svn: wurden geändert:

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


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

a.cgi sollte nicht geändert werden. Ich möchte das ausführbare Bit svn: hinzufügen, das auf die gleiche Weise wie in den anderen Dateien gesetzt werden soll, kann aber den entsprechenden Befehl nicht herausfinden.

Jake
quelle
2
Ich öffne diese Seite jedes Mal, wenn ich nicht tippen möchte svn propset svn:executable on (...). Und die Antwort auf die Frage sollte sein for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done, und nur die geänderten Dateien festschreiben. Dann mach weiter.
Tomasz Gandor
@TomaszGandor Denke, du vermisst svn:executableirgendwo in diesem zweiten Ausschnitt. Vielleicht svn ps svn:executable on $f;?
Keith M
1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - ja, es wurde dem Leser als Übung überlassen.
Tomasz Gandor

Antworten:

166

Sie haben Recht, die Befehle zum Bearbeiten von svn-Eigenschaften zu verwenden. Die Eigenschaft ist svn: ausführbar.

So fügen Sie das "ausführbare Bit" in svn hinzu

svn propset svn:executable on <list of files>

So entfernen Sie das "ausführbare Bit" in svn

svn propdel svn:executable <list of files>

Die SVN-Dokumentation hierzu finden Sie hier.

Soweit Sie die ausführbaren Dateien nicht ändern, ändern Sie die ausführbare Datei nicht (eine Prüfsumme überprüft dies), aber Sie ändern das SVN-Repository. Denken Sie daran, dass SVN Dateisysteme überarbeitet, nicht nur Dateien. Eine Änderung der Berechtigungsbits erhöht also die SVN-Versionsnummer, selbst wenn es sich nur um eine Änderung der Eigenschaften einer Datei handelt (und nicht um eine Änderung der Datei selbst).

Edwin Buck
quelle
Wenn ich svn propset auf die oben gezeigte Weise ausführe, werden sie auf "*" gesetzt, aber auf natürliche Weise setzt svn: ausführbar auf nichts, was aber immer noch gesetzt ist. Ich möchte, dass diese Eigenschaft mit denen übereinstimmt, deren ausführbares Bit gesetzt wurde, bevor sie zur Subversion hinzugefügt wurden.
Jake
2
Entschuldigen Sie alle Änderungen, aber wenn ich mich richtig erinnere, wird das ausführbare Bit aktiviert, wenn es auf irgendetwas gesetzt wird. Wenn Sie es löschen (und möglicherweise auf null oder Leerzeichen setzen), wird es deaktiviert. Um den Wert zu ermitteln, den Ihr SVN-Client verwendet hat, kann ein SVN-Propget verwendet werden.
Edwin Buck
-2

Hier erfahren Sie, wie ich die ausführbare Eigenschaft für alle * .py-Dateien in meinem Projekt festlege, für die ein Ausführungsbit festgelegt wurde. Ich führe dies aus dem Verzeichnis der obersten Ebene aus

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
quelle
Wie wird das ausführbare Attribut ohne Verwendung von Requisiten festgelegt? Ich habe es nicht benutzt, und nach meinem besten Wissen hat es auch niemand anderes getan. Es erscheint in drei Dateien im selben Verzeichnis und nirgendwo anders, und diese Dateien scheinen nichts Besonderes zu sein. (Es sind Java-Dateien, nicht sh oder exe oder bat oder jar oder was auch immer.)
Jerry Miller
Ich glaube, wenn die Datei das ausführbare Bit beim ersten Import gesetzt hat, wird die ausführbare Eigenschaft svn gesetzt.
Isaac Jessop
Ich bin mir ziemlich sicher, dass find einen -perm-Schalter hat, der vielleicht etwas eleganter ist als das Wenn / Dann, aber natürlich wäre es mehr zu merken
Nie wieder schlafen