Собственно сабж. Есть subversion-1.6.6, работает через apache. Можно ли как то при коммите исключить файлы по маске, например *.jpg и/или *.png.Пробовал так
svn propset svn:ignore . *.jpg -R
Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход занимает много времени. Можно ли как то для одной папки в корне репозитария указать маски файлов, которые не сохранять в эту папку?
>[оверквотинг удален]
>коммите исключить файлы по маске, например *.jpg и/или *.png.
>
>Пробовал так
>
>svn propset svn:ignore . *.jpg -R
>
>Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход
>занимает много времени. Можно ли как то для одной папки в
>корне репозитария указать маски файлов, которые не сохранять в эту папку?
>не совсем понял в чём проблема.
свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное свойство только для нужной папки без ключа -R
>[оверквотинг удален]
>>svn propset svn:ignore . *.jpg -R
>>
>>Но тогда возникают проблемы при большом количестве папок и проектов. Рекурсивный обход
>>занимает много времени. Можно ли как то для одной папки в
>>корне репозитария указать маски файлов, которые не сохранять в эту папку?
>>
>
>не совсем понял в чём проблема.
>свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное
>свойство только для нужной папки без ключа -RЧеловек сделал checkout проекта к себе на комп, в процессе работы он создает там подпапки, так вот мне надо исключить при коммите заливку по маске с любой папки. Если ставлю только на корень, то не работает
>[оверквотинг удален]
>>>
>>
>>не совсем понял в чём проблема.
>>свойство svn:ignore и так только папкам присваивается, и вчём проблема указать данное
>>свойство только для нужной папки без ключа -R
>
>Человек сделал checkout проекта к себе на комп, в процессе работы он
>создает там подпапки, так вот мне надо исключить при коммите заливку
>по маске с любой папки. Если ставлю только на корень, то
>не работаетЕсли человек сделал себе checkout то у него локальная рабочая копия на которую вы повлиять не всилах. Если этот человек создаёт в рабочей копии файлы и ставит их под версионый контроль то он явно не ожидает что при коммите они исчезнут. Тоесть нужно чтоб он либо сам их не ставил на версионый контроль либо при создании папки присваивал её корректные свойства игнорирования. Можно поросить чтоб человек в настройках своего клиента указал в файле ~/.subversion/cofig указал опции для global-ignores.
Есть ещё возможность поставить хуки на определёные действия с репозиторием, но поскольку транзакции атомарны и если пользователь будет упорно хотеть залить вам эти jpeg то на лету чтото сменить вы уже не сможе, после транзакции конечно можно будет выставить нужные свойства на новые папки пользователя и даже удалить лишние файлы, но это будет уже новая правка поскольку из репозитория ничего исчезнуть не может. Так что думаю вам они не подойдут.
Думаю стоит посмотреть в сторону global-ignores и уговорить клиента прописать их у себя либо через хуки не давать ему делать комит с запрещёными файлами.
>Если человек сделал себе 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.exe commit http://svn.repo.name/Auto_backup/user_name D:/svn/user_name/Projects
>
>пользователь вообще сам руками не запускает commit
>можно ли прописать их только для одной папки, например, чтобы они действовали
>только для ROOT_REPO_NAME/Auto_backup?как уже говорилось разработчики системы версионирования очень сильно старались чтоб ничего не могло исчезнуть из репозитария если оно туда попало, программа клиент помещая в репозитарий старается ничего не потерять.
Если пользователь ничего не знает то как вновь созданные файлы попапдают под версионный контроль, если просто создать папку или файл то она не станет автоматом комитится в репозиторий. Значит это делает либо пользователь либо какойто софт. Думаю перед вызовом svn commit в вашем скрипте придётся вызвать ещё команды который в рабочей копии произведут нкжный настройки.
Что касаемо хуков то это просто скрипт который вызывается на сервер до комита и ему передаётся кто хочет и куда хочет комитить, а скрит говорит да или нет. Или после комита и ему также передётся кто и куда.
С точность до файла врядли получится хотя тут надо читать доки я в хуках не особо.А так на сервере настроек нет всё что клиент хочет сервер сохранит, всё или нечего.
>Если пользователь ничего не знает то как вновь созданные файлы попапдают под
>версионный контроль, если просто создать папку или файл то она не
>станет автоматом комитится в репозиторий. Значит это делает либо пользователь либо
>какойто софт. Думаю перед вызовом svn commit в вашем скрипте придётся
>вызвать ещё команды который в рабочей копии произведут нкжный настройки.svn.exe add ...
svn.exe commit ...если быть точным
>Что касаемо хуков то это просто скрипт который вызывается на сервер до
>комита и ему передаётся кто хочет и куда хочет комитить, а
>скрит говорит да или нет. Или после комита и ему также
>передётся кто и куда.
>С точность до файла врядли получится хотя тут надо читать доки я
>в хуках не особо.а можно по имени папки сделать исключения?
>А так на сервере настроек нет всё что клиент хочет сервер сохранит,
>всё или нечего.жаль, неудобно
Почитал про хуки в subversion. При запуске хука ему только предаётся куда будет коммит и кто будет это делать. И хук либо даёт добро на транзакцию либо нет.Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.
>Почитал про хуки в subversion. При запуске хука ему только предаётся куда
>будет коммит и кто будет это делать. И хук либо даёт
>добро на транзакцию либо нет.
>
>Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.а можешь показать пример содержимого файла?
>>Почитал про хуки в subversion. При запуске хука ему только предаётся куда
>>будет коммит и кто будет это делать. И хук либо даёт
>>добро на транзакцию либо нет.
>>
>>Как вариант можно запускать svn commit этой папки с опцией --config-dir <dir> куда положить конфиг с глобальным игнором *.jpeg и т.п.
>
>а можешь показать пример содержимого файла?А чего там показывать. Пара строк. Лучше почитайте http://svnbook.red-bean.com/
главы 7 Профессиональная настройка Subversion (Параметры времени выполнения) и Глава 3. Профессиональное использование Subversion (Пропуск неверсионированных элементов) там всё подробно разжёвано про отличия для виндовс и unix на русском, правда для версии 1.4, но и в английском для версии 1.6 разницы не заметил.
Ну ещё Глава 9. Полное справочное руководство по Subversion (Параметры командной строки svn)
Так в том то и дело, что не получается. Создал файл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 файл все равно попадает в репозитарий.
>[оверквотинг удален]
>[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\"
>что-то мне подсказывает сто правильней будет --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': Синтаксическая ошибка в имени файла, име
ни папки или метке тома.
>>что-то мне подсказывает сто правильней будет --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]
>можете создать в этой папке файл servers содержащий следующие строки:
>[groups]
>
>[global]так и делал, не работает
>>можете создать в этой папке файл servers содержащий следующие строки:
>>[groups]
>>
>>[global]
>
>так и делал, не работаетСам попробовал вот что пулучилось:
1. создал папку <path>/svn
2. в ней файл config следующего содержания:
[miscellany]
global-ignores = *.jpg3. в текущей рабочей копии даю команду
mkdir ./tmp && echo "test" > ./tmp/test.jpg && echo "test" > ./tmp/test.txt4. затем даю команду
svn add --config-dir <path>/svn ./tmp5.Получаю результат
A tmp
A tmp/test.txtКак видно jpg не поставился под версионный контроль. Всё просто :)
>Как видно jpg не поставился под версионный контроль. Всё просто :)проблема оказалась до ужаса смешной
рабочий пример
%svn_command% add --config-dir C:\svn\ ...не рабочий
%svn_command% add --config-dir "C:\svn\"
:)