Правильний спосіб додати svn: виконуваний файл


107

У мене є кілька файлів, які можна виконати до додавання svn. У них встановлено властивість svn: виконуваний файл. Тепер кілька інших файлів були зареєстровані без виконуваного біта, його немає, і я хочу встановити властивість svn: Executable:

$ svn propset svn:executable on *.cgi

Потім я перевіряю стан і навіть файли з файлом svn: виконуваний файл були змінені:

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


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

a.cgi не слід змінювати. Я хочу додати біт svn: виконуваного файлу, який потрібно встановити так само, як і в інших файлах, але не можу визначити команду для цього.


2
Я відкриваю цю сторінку щоразу, коли не хочу вводити текст svn propset svn:executable on (...). І відповідь на питання має бути for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done, і просто зафіксувати змінені файли. Потім рухайтеся далі.
Томаш Гандор

@TomaszGandor Подумайте, що ви пропали svn:executableдесь у цьому другому фрагменті. Можливо svn ps svn:executable on $f;?
Кіт М

1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - так, це було залишено читачею як вправу.
Томаш Гандор

Відповіді:


166

Ви маєте право використовувати команди редагування властивостей svn. Властивість svn: виконується.

Щоб додати "виконавчий біт" у svn

svn propset svn:executable on <list of files>

Щоб видалити "виконуваний біт" у svn

svn propdel svn:executable <list of files>

Документація SVN для цього знаходиться тут.

Що стосується того, що ви не змінюєте виконувані файли, ви не модифікуєте виконуваний файл (контрольна сума перевірить це), але ви змінюєте сховище SVN. Пам'ятайте, що SVN переглядає файлові системи, а не лише файли; таким чином, зміна бітів дозволу збільшить номер версії SVN, навіть якщо це лише модифікація властивостей файлу (а не модифікація самого файлу).


Коли я запускаю пропсет svn у спосіб, показаний вище, він встановлює їх на "*", але природний спосіб встановлює svn: виконуваний ні до чого, але який все ще встановлений. Я хочу, щоб ця властивість була такою ж, як у тих, чий виконуваний біт був встановлений перед тим, як додати їх до субверсії.
Джейк

2
Вибачте за всі зміни, але якщо я пам'ятаю правильно, встановивши його на що-небудь, він увімкне виконуваний біт, його видалення (і, можливо, встановлення на нуль або пробіл) вимкне його. Щоб отримати значення, який використовував ваш клієнт SVN, можна використовувати прогн svn.
Едвін Бак

-2

Ось як я встановлюю властивість виконуваного файлу на всі файли * .py в своєму проекті, які виконують набір бітів. Я виконую це з каталогу верхнього рівня

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;

Як встановлюється виконуваний атрибут без використання propset? Я не користувався ним, і наскільки мені було відомо, ще ніхто не робив. Він з’являється в трьох файлах в одному каталозі і ніде більше, і, здається, немає нічого особливого в цих файлах. (Це файли java, а не ш, exe, bat або jar чи що завгодно.)
Джеррі Міллер

Я вважаю, що якщо у файлі встановлено виконуваний біт при його імпорті, тоді буде встановлено виконуване властивість svn.
Ісаак Джессоп

майже впевнений, що в наявності є перемикач -perm, який може бути трохи елегантнішим, ніж якщо / то, але, звичайно, було б більше пам’ятати
Ніколи не спить знову
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.