Проблема с пропсетом SVN: игнорировать - возможно, связана с Vista - PullRequest
4 голосов
/ 02 октября 2008

Насколько я понимаю, команда для игнорирования содержимого каталога с использованием SVN выглядит так:

svn propset svn:ignore "*" tmp/

Это должно установить свойство ignore для содержимого каталога tmp, верно? Другими словами, подстановочный знак устанавливается как значение игнорирования в каталоге tmp. Проблема в том, что вот что происходит на моей Windows-коробке:

> svn propset svn:ignore "*" ./tmp
property 'svn:ignore' set on 'app'
property 'svn:ignore' set on 'config'
property 'svn:ignore' set on 'db'
property 'svn:ignore' set on 'doc'
property 'svn:ignore' set on 'lib'
property 'svn:ignore' set on 'log'
property 'svn:ignore' set on 'nbproject'
property 'svn:ignore' set on 'public'
[etc...]

Это не правильно. Я делаю что-то не так (или, возможно, схожу с ума), или мой SVN на Windows сломан?

Некоторые примечания:

  • Машина работает под управлением Windows Vista с пакетом обновления 1
  • Установка этого свойства через Черепаху работает отлично.
  • Я использую двоичные файлы Collabnet для Windows :

> svn --version<br /> svn, version 1.5.2 (r32768)<br /> compiled Aug 28 2008, 19:05:34


Обновление: Я только что попробовал это на компьютере с Windows XP, и он работает как положено. Так что это либо проблема, специфичная для Vista, либо проблема с моей конфигурацией Vista. Кто-нибудь еще может воспроизвести эту проблему на Vista? Я только что заметил, что Vista не указана в качестве одной из поддерживаемых платформ на странице загрузок CollabNet .

Ответы [ 8 ]

8 голосов
/ 02 октября 2008

Похоже, Microsoft в своей бесконечной мудрости изменила поведение подстановочного знака в Windows Vista :

Таким образом, вместо переданного экранированного символа, он расширяется:

В Win 95, 98, 2000, XP приложение работает должным образом: оно выполняет расширение по шаблону, когда параметры похожи на «* .txt», и НЕ, когда параметры похожи на «« * .txt »». В Windows Vista подстановочные знаки всегда имеют место, или, как говорится, двойные кавычки НЕ подавляют его.

Дальнейшее обсуждение этого вопроса происходит на форуме Collabnet .

5 голосов
/ 02 октября 2008

Команда должна работать так, как вы ожидаете.

* становится скованным, чего не следует делать. Итак, вы бежите:
svn propset svn:ignore [value] app config db doc lib log nbproject public ... tmp
(так как приложение было первой затронутой папкой, я предполагаю, что перед ним есть еще одна папка).

2 вещи, которые вы можете попробовать:

  1. Укажите файл списка: svn propset svn:ignore tmp -F .svnignore
  2. Просто укажите путь: svn propset svn:ignore tmp. Это должно открыть ваш текстовый редактор по умолчанию (если настроен), чтобы позволить вам написать и сохранить список.

Ответ на комментарий

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

Но, если у вас нет других проблем, о которых стоит беспокоиться (отметьте svn st), это будет быстрее при использовании svn revert -R и svn propset.

3 голосов
/ 02 октября 2008

Мне кажется, что двоичный файл svn.exe, скомпилированный для Windows, выполняет встроенную глобализацию, чего обычно не происходит в сборке Unix, поскольку ожидается, что оболочка Unix будет выполнять глобализацию при построении команды. линия. Я бы подумала об этом неожиданном поведении, особенно если учесть, что вы не можете обойтись без суеты.

Как уже отмечали другие, вы можете указать * с помощью опции -F или в интерактивном режиме в текстовом редакторе.

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

svn propset svn:ignore tmp .

Устанавливает свойство svn:ignore для . (текущий каталог, родительский элемент tmp/), которое указывает ему игнорировать подкаталог tmp и все, что находится под ним.

3 голосов
/ 02 октября 2008

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

Вы пытаетесь игнорировать это, потому что оно уже есть, и вы не можете удалить его?

Во всяком случае, из моей командной строки Unix это работало для меня, чтобы игнорировать неотслеживаемый файл в директории с именем tmp

$ svn --version
svn, version 1.5.1 (r32289)
   compiled Aug 28 2008, 10:00:12

$  svn propset svn:ignore '*' tmp

Неужели Windows не цитирует ваши слова?

2 голосов
/ 02 октября 2008

Какую версию Subversion вы используете?

Я попробовал 1.5.2 в Windows, и он только изменил свойство в каталоге tmp:

[C:\Temp\temp] :svn propset svn:ignore "*" tmp/
property 'svn:ignore' set on 'tmp'

и

[C:\Temp\temp] :svn proplist *
svn: Skipping argument: '.svn' ends in a reserved name
Properties on 'tmp':
  svn:ignore
1 голос
/ 14 апреля 2010

Чтобы использовать однострочник в сценариях оболочки, используя альтернативу "-F", просто попробуйте это:

echo "*" > .svnignore && svn propset svn:ignore <path> -F .svnignore && rm .svnignore
0 голосов
/ 12 января 2009

Разумно использовать SVN-клиент с графическим интерфейсом (если вы не мазохист!). Если вы используете Windows, TortoiseSVN должен быть вашим первым портом захода. Щелкните правой кнопкой мыши по файлу, который вы хотите игнорировать, затем нажмите «TortoiseSVN -> Свойства». В диалоге свойств вы можете игнорировать весь каталог, щелкнув стрелку раскрывающегося списка «Имя» и выбрав «svn: ignore». Затем в поле значений просто введите «*» для всех. Это все без кавычек, конечно.

0 голосов
/ 02 октября 2008

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

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