SVN: игнорировать сгенерированные подпапки - PullRequest
3 голосов
/ 17 сентября 2010

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

при условии, что структура dir:

/
   /foo
   /bar
   /web
      /uploads
          /assets
          /avatars
              /fu
                  /*.jpg
              /ba
                  /*.jpg
              keepme.jpg
              keepmetoo.jpg

Я хочу игнорироватьвсе подпапки каталога аватаров, но не файлы этого каталога (keepme.jpg, keepmetoo.jpg).

Подпапки аватаров (fu, ba) генерируются автоматически, и имена не могут быть определены заранее, поэтому необходимополностью игнорировать все вложенные папки / аватара.

Возможно ли это?и как?

Edit мы бы предпочли не использовать хуки после фиксации.Это просто вопрос предпочтений.У нас есть много хорошо зарекомендовавших себя приложений, и мы разработали стандартизированный способ работы, а хуки после фиксации просто еще не использовались.Мы бы просто предпочли не добавлять ненужных дополнительных движущихся частей.Честно говоря, более вероятно, что мы бы обратились к структуре каталогов (что немалая задача), прежде чем рассмотреть возможность добавления хуков после фиксации.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Вы хотите сохранить весь лот в svn, кроме / avataurs / fu и avatars / ba (на самом деле все avatars / xxx)?

Вам необходимо изначально добавить оставшуюся структуру каталогов в svn.Используйте Tortoise, чтобы добавить корневой каталог, отмените проверку каталогов, которые вы не хотите добавлять, затем подтвердите.это решает первоначальную проблему - не фиксируя нарушающие подкаталоги, все хорошо.

Кроме того, следующая проблема заключается в том, что вы не хотите, чтобы кто-то еще «случайно» добавил вновь сгенерированные подкаталоги - в данном случае предварительноКрюк обязателен.Они действительно очень просты - вам нужно всего лишь написать быстрый пакетный файл или Perl-скрипт, который делает aregex для путей входящих файлов, и возвращает 1, если он есть, ".*/avatars/.*/.*" (который все еще позволит добавлять новые файлы к этомукаталог).Хук также может возвращать текст, который будет отображаться пользователю, который добавил файлы.Я использую один, чтобы предотвратить возврат файлов с расширением в списке банов (например, .obj и т. Д.).

Если подкаталоги аватаров никогда не попадут в SVN, вы никогда не будете проверять их - очевидно -и ваша работа выполнена!


Вот копия моего файла ловушки pre-commit.cmd.Просто поместите его в свой каталог ловушек (в Windows), и все готово.

@echo off

svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit 0

echo disallowed file extension >> c:\temp\precommit-bad.txt

type c:\temp\precommit-bad.txt 1>&2
exit 1

файл ignore-match.txt содержит такие строки:

^[^D].*\.obj$

что угодночто соответствует записи в файле ignore-match.txt означает, что фиксация отклонена, пользователь должен будет повторить попытку, на этот раз правильно.

1 голос
/ 09 февраля 2011

Короче говоря, с чистым SVN только для конфигурации это невозможно.Но у вас есть несколько вариантов для настройки этих свойств и для их проверки, например,

  • , активирующий инструмент автоматического создания аватара,
  • вызывает пакетный файл, обновляющий параметры SVN после автоматического-generation,
  • вызывает пакетный файл, обновляющий настройки SVN перед фиксацией.

На стороне сервера вы можете

  • отклонить коммиты доДля фиксации, если они не следуют правилам,
  • автоматически обновляет настройки в ловушке после фиксации,
  • или требуют умных разработчиков и проверяют только в системе CI.

Во-первых, я бы порекомендовал автоматически обновлять свойство svn: ignore после автогенерации папок.Самый простой способ - вызвать пакетный файл после генерации.Сам пакетный файл будет простым:

@echo off
echo.>~svnignore
dir /b /aD >~svnignore
svn propset svn:ignore --file ~svnignore .
del ~svnignore

Конечно, файл ~svnignore должен быть именем файла, которое вы можете гарантировать не использовать ни для чего другого.Если это вызывается автоматически при генерации, это должно работать для всех.

Во-вторых, я бы порекомендовал проверить целостность либо в хуке предварительной фиксации.Выполнение этого в post-commit может быть приемлемым, в системе непрерывной интеграции это будет определенно слишком поздно.

Наконец, у вас есть другой вариант, хотя я бы не рекомендовал идти по этому пути: поскольку вы пометиливопрос с tortoisesvn Я полагаю, вы используете этот инструмент.Это дает вам дополнительную возможность использовать клиентскую ловушку предварительной фиксации.Для этого перейдите в диалог настроек TortoiseSVN.В дереве слева вы найдете запись Hook Scripts , где вы можете настроить некоторые исполняемые файлы (например, пакетные файлы ...) для выполнения в определенное время, например, pre-commit time.

Недостатком этого является то, что вы практически прекращаете использование SVN на всех приставках, и если вам нужна автоматизация для некоторых сборок / тегов и т. Д., Это будет бесполезно.

0 голосов
/ 17 сентября 2010

Настройка start-commit hook может быть решением.

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