URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 87616
[ Назад ]

Исходное сообщение
"SVN: Исключение файлов по маске при коммите"

Отправлено ALex_hha , 14-Дек-09 20:22 
Собственно сабж. Есть subversion-1.6.6, работает через apache. Можно ли как то при коммите исключить файлы по маске, например *.jpg и/или *.png.

Пробовал так

svn propset svn:ignore . *.jpg -R

Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход занимает много времени. Можно ли как то для одной папки в корне репозитария указать маски файлов, которые не сохранять в эту папку?


Содержание

Сообщения в этом обсуждении
"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 14-Дек-09 20:31 
>[оверквотинг удален]
>коммите исключить файлы по маске, например *.jpg и/или *.png.
>
>Пробовал так
>
>svn propset svn:ignore . *.jpg -R
>
>Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход
>занимает много времени. Можно ли как то для одной папки в
>корне репозитария указать маски файлов, которые не сохранять в эту папку?
>

не совсем понял в чём проблема.
свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное свойство только для нужной папки без ключа -R


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 14-Дек-09 20:58 
>[оверквотинг удален]
>>svn propset svn:ignore . *.jpg -R
>>
>>Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход
>>занимает много времени. Можно ли как то для одной папки в
>>корне репозитария указать маски файлов, которые не сохранять в эту папку?
>>
>
>не совсем понял в чём проблема.
>свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное
>свойство только для нужной папки без ключа -R

Человек сделал checkout проекта к себе на комп, в процессе работы он создает там подпапки, так вот мне надо исключить при коммите заливку по маске с любой папки. Если ставлю только на корень, то не работает


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 14-Дек-09 22:58 
>[оверквотинг удален]
>>>
>>
>>не совсем понял в чём проблема.
>>свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное
>>свойство только для нужной папки без ключа -R
>
>Человек сделал checkout проекта к себе на комп, в процессе работы он
>создает там подпапки, так вот мне надо исключить при коммите заливку
>по маске с любой папки. Если ставлю только на корень, то
>не работает

Если человек сделал себе checkout то у него локальная рабочая копия на которую вы повлиять не всилах. Если этот человек создаёт в рабочей копии файлы и ставит их под версионый контроль то он явно не ожидает что при коммите они исчезнут. Тоесть нужно чтоб он либо сам их не ставил на версионый контроль либо при создании папки  присваивал её корректные свойства игнорирования. Можно поросить чтоб человек в настройках своего клиента  указал в файле ~/.subversion/cofig указал опции для global-ignores.
Есть ещё возможность поставить хуки на определёные действия с репозиторием, но поскольку транзакции атомарны и если пользователь будет упорно хотеть залить вам эти jpeg то на лету чтото сменить вы уже не сможе, после транзакции конечно можно будет выставить нужные свойства на новые папки пользователя и даже удалить лишние файлы, но это будет уже новая правка поскольку из репозитория ничего исчезнуть не может. Так что думаю вам они не подойдут.
Думаю стоит посмотреть в сторону global-ignores и уговорить клиента прописать их у себя либо через хуки не давать ему делать комит с запрещёными файлами.


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 15-Дек-09 00:21 
>Если человек сделал себе checkout то у него локальная рабочая копия на
>которую вы повлиять не всилах. Если этот человек создаёт в рабочей
>копии файлы и ставит их под версионый контроль то он явно
>не ожидает что при коммите они исчезнут.

он этого даже не знает, у меня по планировщику запускается скрипт, который комитит данные раз в 2 часа.

>Тоесть нужно чтоб он либо сам их не ставил на версионый контроль либо при создании
>папки  присваивал её корректные свойства игнорирования.

не реально

>Можно поросить чтоб человек
>в настройках своего клиента  указал в файле ~/.subversion/cofig указал опции
>для global-ignores.

тоже не реально :). И опять таки, мне нужно, чтобы jpg файлы не комитились только в одну папку в репозитарии, а не на весь репозитарий в целом.

Сейчас попробую объяснить. Есть слдующая иерархия репозитария

ROOT_REPO_NAME
   |
   |_Department1
   |
   |_Department2
   |
   |_Department3
   |
   |_Auto_backup

Так вот надо оставить возможность сохранять в Department1, Department2, Department3 любые файлы, а в Auto_backup, все файлы кроме jpg.

Коммит на стороне клиента запускается автоматом из скрипта, по типу

svn.exe commit http://svn.repo.name/Auto_backup/user_name D:/svn/user_name/Projects

>Есть ещё возможность поставить хуки на определёные действия с репозиторием, но поскольку
>транзакции атомарны и если пользователь будет упорно хотеть залить вам эти
>jpeg то на лету чтото сменить вы уже не сможе, после
>транзакции конечно можно будет выставить нужные свойства на новые папки пользователя
>и даже удалить лишние файлы, но это будет уже новая правка
>поскольку из репозитория ничего исчезнуть не может. Так что думаю вам
>они не подойдут.

пользователь вообще сам руками не запускает commit

>Думаю стоит посмотреть в сторону global-ignores и уговорить клиента прописать их у
>себя либо через хуки не давать ему делать комит с запрещёными
>файлами.

можно ли прописать их только для одной папки, например, чтобы они действовали только для ROOT_REPO_NAME/Auto_backup?


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 15-Дек-09 00:55 
>Коммит на стороне клиента запускается автоматом из скрипта, по типу
>
>svn.exe commit http://svn.repo.name/Auto_backup/user_name D:/svn/user_name/Projects
>
>пользователь вообще сам руками не запускает commit
>можно ли прописать их только для одной папки, например, чтобы они действовали
>только для ROOT_REPO_NAME/Auto_backup?

как уже говорилось разработчики системы версионирования очень сильно старались чтоб ничего не могло исчезнуть из репозитария если оно туда попало, программа клиент помещая в репозитарий старается ничего не потерять.

Если пользователь ничего не знает то как вновь созданные файлы попапдают под версионный контроль, если просто создать папку или файл то она не станет автоматом комитится в репозиторий. Значит это делает либо пользователь либо какойто софт. Думаю перед вызовом svn commit в вашем скрипте придётся вызвать ещё команды который в рабочей копии произведут нкжный настройки.

Что касаемо хуков то это просто скрипт который вызывается на сервер до комита и ему передаётся кто хочет и куда хочет комитить, а скрит говорит да или нет. Или после комита и ему также передётся кто и куда.
С точность до файла врядли получится хотя тут надо читать доки я в хуках не особо.

А так на сервере настроек нет всё что клиент хочет сервер сохранит, всё или нечего.


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 15-Дек-09 01:09 
>Если пользователь ничего не знает то как вновь созданные файлы попапдают под
>версионный контроль, если просто создать папку или файл то она не
>станет автоматом комитится в репозиторий. Значит это делает либо пользователь либо
>какойто софт. Думаю перед вызовом svn commit в вашем скрипте придётся
>вызвать ещё команды который в рабочей копии произведут нкжный настройки.

svn.exe add ...
svn.exe commit ...

если быть точным

>Что касаемо хуков то это просто скрипт который вызывается на сервер до
>комита и ему передаётся кто хочет и куда хочет комитить, а
>скрит говорит да или нет. Или после комита и ему также
>передётся кто и куда.
>С точность до файла врядли получится хотя тут надо читать доки я
>в хуках не особо.

а можно по имени папки сделать исключения?

>А так на сервере настроек нет всё что клиент хочет сервер сохранит,
>всё или нечего.

жаль, неудобно


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 15-Дек-09 15:01 
Почитал про хуки в subversion. При запуске хука ему только предаётся куда будет коммит и кто будет это делать. И хук либо даёт добро на транзакцию либо нет.

Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.



"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 15-Дек-09 20:57 
>Почитал про хуки в subversion. При запуске хука ему только предаётся куда
>будет коммит и кто будет это делать. И хук либо даёт
>добро на транзакцию либо нет.
>
>Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.

а можешь показать пример содержимого файла?


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 16-Дек-09 10:02 
>>Почитал про хуки в subversion. При запуске хука ему только предаётся куда
>>будет коммит и кто будет это делать. И хук либо даёт
>>добро на транзакцию либо нет.
>>
>>Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.
>
>а можешь показать пример содержимого файла?

А чего там показывать. Пара строк. Лучше почитайте http://svnbook.red-bean.com/
главы 7 Профессиональная настройка Subversion (Параметры времени выполнения) и Глава 3. Профессиональное использование Subversion (Пропуск неверсионированных элементов) там всё подробно разжёвано про отличия для виндовс и unix на русском, правда для версии 1.4, но и в английском для версии 1.6 разницы не заметил.
Ну ещё Глава 9. Полное справочное руководство по Subversion (Параметры командной строки svn)


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 16-Дек-09 12:18 
Так в том то и дело, что не получается. Создал файл

C:\svn\config

[global]
global-ignores = *.jpg

запускаю скрипт

svn.exe add "%work_dir%/%user%/Projects/" --force --username %user% --password %pass% --config-dir "C:\svn\config"

svn.exe commit "%work_dir%/%user%/Projects/" --username %user% --password %pass%

Но при этом jpg файл все равно попадает в репозитарий.


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 16-Дек-09 12:49 
>[оверквотинг удален]
>[global]
>global-ignores = *.jpg
>
>запускаю скрипт
>
>svn.exe add "%work_dir%/%user%/Projects/" --force --username %user% --password %pass% --config-dir "C:\svn\config"
>
>svn.exe commit "%work_dir%/%user%/Projects/" --username %user% --password %pass%
>
>Но при этом jpg файл все равно попадает в репозитарий.

что-то мне подсказывает сто правильней будет --config-dir "C:\svn\"


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 16-Дек-09 13:12 
>что-то мне подсказывает сто правильней будет --config-dir "C:\svn\"

тогда получаю

svn.exe add "D:\SVN\Current_work"/user_name/Projects/" --force --username user --password 1234567 --config-dir "C:\svn\"

svn: Can't open file 'C:\svn"\servers': Синтаксическая ошибка в имени файла, име
ни папки или метке тома.


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 16-Дек-09 14:02 
>>что-то мне подсказывает сто правильней будет --config-dir "C:\svn\"
>
>тогда получаю
>
>svn.exe add "D:\SVN\Current_work"/user_name/Projects/" --force --username user --password 1234567 --config-dir "C:\svn\"
>
>svn: Can't open file 'C:\svn"\servers': Синтаксическая ошибка в имени файла, име
>ни папки или метке тома.

было бы логично взять текущие файлы с конфигами из пользовательской папки (где их искать в винде в книге написано) и подправить нужную строчку настройки.

можете создать в этой папке файл servers содержащий следующие строки:
[groups]

[global]


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 16-Дек-09 15:10 
>можете создать в этой папке файл servers содержащий следующие строки:
>[groups]
>
>[global]

так и делал, не работает


"SVN: Исключение файлов по маске при коммите"
Отправлено ze6ra , 16-Дек-09 17:47 
>>можете создать в этой папке файл servers содержащий следующие строки:
>>[groups]
>>
>>[global]
>
>так и делал, не работает

Сам попробовал вот что пулучилось:

1. создал папку <path>/svn

2. в ней файл config следующего содержания:

[miscellany]
global-ignores = *.jpg

3. в текущей рабочей копии даю команду
mkdir ./tmp && echo "test" > ./tmp/test.jpg && echo "test" > ./tmp/test.txt

4. затем даю команду
svn add --config-dir <path>/svn  ./tmp    

5.Получаю результат
A         tmp
A         tmp/test.txt

Как видно jpg не поставился под версионный контроль. Всё просто :)


"SVN: Исключение файлов по маске при коммите"
Отправлено ALex_hha , 16-Дек-09 18:11 
>Как видно jpg не поставился под версионный контроль. Всё просто :)

проблема оказалась до ужаса смешной

рабочий пример
%svn_command% add --config-dir C:\svn\ ...

не рабочий

%svn_command% add --config-dir "C:\svn\"

:)