Рекурсивно игнорируя файлы во всем исходном дереве в subversion
Я не новичок в Subversion, но до сих пор я использовал Tortoise и никогда не был по умолчанию. Мой вопрос в том, как игнорировать все файлы, такие как *.o, из источника ENTIRE, а не только из корня.
Например, если у меня есть следующие файлы:
/myfile.o
/folder 1/myfile2.o
/folder 1/folder1.1/myfile3.o
/folder 2/myfile4.o
Если svn propedit svn: ignore "." в корневом каталоге и добавьте *.o, он будет игнорировать myfile.o, но не игнорирует /folder 1/myfile2.o,/folder1/folder1.1/myfile3.o,/folder2/myfile4.o. Есть ли способ добавить *.o в для всего проекта (я не могу сделать это для всего репозитория, который, как я знаю, может быть выполнен, потому что этот проект находится в репозитории со многими другими проектами)?
Пожалуйста, дайте мне знать, если мне нужно уточнить. Спасибо!
Ответы
Ответ 1
Изменить
Первоначальный ответ, представленный ниже, был дан до Subversion v1.8, который ввел способ установки игнорирования уровня репозитория по умолчанию (называемый svn:global-ignores
) без переопределения/замены свойства svn:ignore
в корневом каталоге и в каждом отдельном подкаталоге, Начиная с версии 1.8, лучший способ добиться того, что вы хотите, - вызвать следующую команду (кредит идет на TManhente):
svn propset svn:global-ignores '*.o' .
В более ранних версиях (и в более поздних версиях) вы все равно можете использовать подход, указанный в первоначальном ответе ниже; однако имейте в виду, что это предполагает, что вы в порядке с заменой/перезаписью свойства svn:ignore
для каждого подкаталога... это может быть хорошо для небольшого/нового репозитория, но, вероятно, не то, что вы хотите, если у вас есть большой /old, в котором некоторые подкаталоги могут иметь независимые свойства svn:ignore
, которые вы не хотите перезаписывать.
Оригинальный ответ
Вы можете использовать опцию "-R" или "--recursive" с "svn propset", как в следующей команде:
svn propset svn:ignore '*.o' . --recursive
Дополнительная информация
В обоих случаях вы можете использовать следующую команду для получения дополнительной информации о svn propset:
svn help propset
Ответ 2
Просто обновление: Subversion 1.8.0 представляет Inherited Properties и Reactitory Dictated Configuration (для автоподстановки и игнорирования), которые также могут быть использованы в этом случае.
Вы можете установить новое свойство svn:global-ignores
в корневой путь. Он будет "влиять только на поддеревья, установленные на пути, на котором установлено свойство".
Это новое свойство устанавливается так же, как svn:ignore
:
svn propset svn:global-ignores '*.o' .
Дополнительная информация доступна в Заметках о выпуске Subversion 1.8.0.
Ответ 3
Как указано @hackmaster.a в комментарии, пример, приведенный в принятом ответе, имеет побочный эффект для удаления всех предыдущих настроек svn:ignore
. Использование propedit
вместо propset
тоже не работает.
Правильный способ добавления нескольких файлов рекурсивно состоит в том, чтобы поместить свои имена в список, разделенный новыми строками в свойстве svn:ignore
с svn propset svn:ignore "[LIST]" .
Например:
svn propset svn:ignore -R "*.pkl
> *.class
> Thumbs.db
> data.tmp" .
Конечно, >
- это только приглашения оболочки.
Эта команда изменяет свойства svn:ignore
текущего каталога .
и каждой из его подпапок рекурсивно.