Właściwy sposób dodania svn: wykonywalny

107

Mam kilka plików, które były wykonywalne przed dodaniem ich przez svn. Mają ustawione właściwości svn: executable. Teraz kilka innych plików zostało wpisanych bez wykonywalnego bitu, nie ma go i chcę ustawić właściwość svn: executable:

$ svn propset svn:executable on *.cgi

Następnie sprawdzam status, a nawet pliki z svn: executable zostały zmodyfikowane:

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


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

a.cgi nie powinny być modyfikowane. Chcę dodać bit svn: wykonywalny, który ma być ustawiony w taki sam sposób, jak w innych plikach, ale nie mogę znaleźć polecenia, aby to zrobić.

Jake
źródło
2
Otwieram tę stronę za każdym razem, gdy nie chcę pisać svn propset svn:executable on (...). Odpowiedź na to pytanie powinna brzmieć for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; donei po prostu zatwierdzić zmodyfikowane pliki. Następnie przejdź dalej.
Tomasz Gandor
@TomaszGandor Myślisz, że brakuje Ci svn:executablegdzieś w tym drugim fragmencie. Może svn ps svn:executable on $f;?
Keith M
1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - tak, pozostawiono to jako ćwiczenie czytelnikowi.
Tomasz Gandor

Odpowiedzi:

166

Masz prawo używać poleceń edycji właściwości svn. Właściwość to svn: executable.

Aby dodać „wykonywalny bit” w svn

svn propset svn:executable on <list of files>

Aby usunąć „wykonywalny bit” w svn

svn propdel svn:executable <list of files>

Dokumentacja SVN na ten temat znajduje się tutaj.

O ile nie modyfikujesz plików wykonywalnych, nie modyfikujesz pliku wykonywalnego (suma kontrolna to zweryfikuje), ale modyfikujesz repozytorium SVN. Pamiętaj, że SVN zmienia systemy plików, a nie tylko pliki; tak więc modyfikacja bitów uprawnień zwiększy numer wersji SVN, nawet jeśli jest to tylko modyfikacja właściwości pliku (a nie modyfikacja samego pliku).

Edwin Buck
źródło
Kiedy uruchamiam svn propset w sposób pokazany powyżej, ustawia je na "*", ale w naturalny sposób ustawia svn: executable na nic, ale nadal jest ustawione. Chcę, aby ta właściwość była taka sama, jak te, których bit wykonywalny został ustawiony przed dodaniem ich do subversion.
Jake
2
Przepraszam za wszystkie zmiany, ale jeśli dobrze pamiętam, ustawienie go na cokolwiek spowoduje włączenie wykonywalnego bitu, usunięcie go (i prawdopodobnie ustawienie go na null lub białe znaki) wyłączy go. Aby uzyskać wartość używaną przez klienta SVN, można użyć właściwości svn.
Edwin Buck
-2

Oto, jak ustawić właściwość wykonywalną dla wszystkich plików * .py w moim projekcie, które mają ustawiony bit wykonania. Wykonuję to z katalogu najwyższego poziomu

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
źródło
W jaki sposób atrybut wykonywalny jest ustawiany bez użycia propset? Nie użyłem go i, o ile wiem, nikt inny też tego nie zrobił. Pojawia się na trzech plikach w tym samym katalogu i nigdzie indziej, i wydaje się, że nie ma w nich nic specjalnego. (Są to pliki java, a nie sh, exe, bat, jar czy cokolwiek innego.)
Jerry Miller
Uważam, że jeśli plik ma ustawiony bit wykonywalny, gdy jest początkowo importowany, zostanie ustawiona właściwość wykonywalna svn.
Isaac Jessop,
całkiem pewne znalezisko ma przełącznik -perm, który może być nieco bardziej elegancki niż jeśli / wtedy, ale oczywiście byłby bardziej do zapamiętania
Never Sleep Again