Правильный способ добавления исполняемого файла svn:

107

У меня есть несколько файлов, которые были исполняемыми до того, как svn добавил их. У них есть набор свойств svn: executable. Теперь несколько других файлов были зарегистрированы без исполняемого бита, которого нет, и я хочу установить свойство 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: executable, который будет установлен таким же образом, как и в других файлах, но не могу определить команду для этого.

Джейк
источник
2
Я открываю эту страницу каждый раз, когда не хочу печатать svn propset svn:executable on (...). И ответ на вопрос должен быть for f in *.cgi; do if [ ! -x $f ]; then svn ps (...); fi; done, а просто зафиксировать измененные файлы. Тогда двигайся дальше.
Tomasz Gandor
@TomaszGandor Думаю, вы svn:executableгде-то упустили этот второй фрагмент. Может быть svn ps svn:executable on $f;?
Keith M
1
en.wikipedia.org/wiki/Ellipsis_(linguistics) - да, это было оставлено читателю в качестве упражнения.
Tomasz

Ответы:

166

Вы имеете право использовать команды редактирования свойства svn. Свойство svn: executable.

Чтобы добавить "исполняемый бит" в svn

svn propset svn:executable on <list of files>

Чтобы удалить "исполняемый бит" в svn

svn propdel svn:executable <list of files>

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

Что касается не изменения исполняемых файлов, вы не изменяете исполняемый файл (контрольная сумма это подтвердит), но вы изменяете репозиторий SVN. Помните, что SVN редактирует файловые системы, а не только файлы; Таким образом, изменение битов разрешения увеличит номер версии SVN, даже если это всего лишь модификация свойств файла (а не модификация самого файла).

Эдвин Бак
источник
Когда я запускаю svn propset способом, показанным выше, он устанавливает их в "*", но естественным образом устанавливает svn: executable в значение "ничего", но которое все еще установлено. Я хочу, чтобы это свойство было таким же, как у тех, чей исполняемый бит был установлен перед добавлением их в Subversion.
Джейк
2
Приносим извинения за все изменения, но, если я правильно помню, установка для него любого значения включит исполняемый бит, его удаление (и, возможно, установка его на нуль или пробел) отключит его. Чтобы получить значение, которое использовал ваш клиент SVN, можно использовать svn propget.
Эдвин Бак
-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-файлы, а не sh, exe, bat, jar или что-то еще.)
Джерри Миллер
Я считаю, что если в файле установлен бит исполняемого файла при его первоначальном импорте, то будет установлено свойство исполняемого файла svn.
Исаак Джессоп
почти наверняка у find есть переключатель -perm, который может быть немного более элегантным, чем if / then, но, конечно, его нужно запомнить
Never Sleep Again