Как я могу игнорировать каталог с SVN?



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



Я использую версии и TextMate на OS X и командной строке.

576   23  

23 ответов:

установить svn:ignore свойство родительского каталога:

svn propset svn:ignore dirname .

Если у вас есть несколько вещей, которые нужно игнорировать, разделите новыми строками в значении свойства. В этом случае легче изменить значение свойства с помощью внешнего редактора:

svn propedit svn:ignore .

вот пример структуры каталогов:

\project
    \source
    \cache
    \other

, когда в project вы видите, что ваш каталог кэша не добавляется и отображается как таковой.

> svn st
M  source
?  cache

чтобы установить свойство ignore, выполните

svn propset svn: игнорировать кэш .

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

чтобы проверить, какие свойства установлены:

> svn proplist
Properties on '.':
  svn:ignore

чтобы увидеть значение svn:ignore:

> svn propget svn:ignore
cache

удалить ранее установленные свойства:

svn propdel svn:ignore

важно отметить:

в командной строке, вы не можете использовать

svn add *

это также добавит игнорируемые файлы, потому что командная строка расширяется * и поэтому svn add считает, что вы хотите, чтобы все файлы были добавлены. Поэтому используйте этот код:

svn add --force .

поскольку я потратил некоторое время, пытаясь заставить это работать, следует отметить, что если файлы уже существуют в SVN, вам нужно svn delete их, а затем редактировать svn:ignore собственность.

Я знаю, что кажется очевидным, но они продолжали появляться как ? в своем svn status список, когда я думал, что он будет просто игнорировать их локально.

чтобы немного расширить, если вы делаете это с помощью инструмента командной строки svn, вы хотите ввести:

svn propedit svn:ignore path/to/dir

который откроет ваш текстовый редактор по выбору, затем введите"*", чтобы игнорировать все внутри него, и сохраните+quit - это будет включать в себя сам каталог в svn, но игнорировать все файлы внутри него, игнорировать каталог, использовать путь родителя, а затем введите имя каталога в файле. После сохранения запустите обновление ('svn up'), а затем установите соответствующий флажок путь.

установить svn:ignore свойство в Родительском каталоге:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

это перезапишет любое текущее значение svn:ignore. Вы редактируете значение с помощью:

$ svn pe svn:ignore .

который откроет ваш редактор. Вы можете добавить несколько шаблонов, по одному на строку.

вы можете просмотреть текущее значение с:

$ svn pg svn:ignore .

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

Спасибо за все вклады выше. Я просто хотел бы поделиться некоторой дополнительной информацией из моего опыта, игнорируя файлы.


когда папки уже находятся под контролем версий

после svn import и svn co файлы, что мы обычно делаем в первый раз.

все кэш времени выполнения, папки вложений будут находиться под контролем версий. Итак, перед svn ps svn: игнорировать, нам нужно удалить его из репозитория.

С SVN версии 1.5 выше, мы можем использовать svn del --keep-local your_folder, но для более ранней версии, мое решение:

  1. экспорт svn чистая копия ваших папок (без .svn скрытая папка)
  2. svn del локальный и репозиторий,
  3. svn ci
  4. скопировать обратно папки
  5. Do svn st и подтвердите, что папки помечены как '?-
  6. теперь мы можем сделать svn ps согласно решения

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

  • в одном каталоге у меня есть две папки, которые нужно установить как svn:ignore
  • если мы установим один, другой будет удален.
  • тогда мы удивляемся, что нам нужно svn pe

svn pe нужно отредактируйте текстовый файл, и вы можете использовать эту команду, если требуется, чтобы установить текстовый редактор с помощью vi:

export SVN_EDITOR=vi
  1. С помощью "o" вы можете открыть новую строку
  2. введите все имена папок, которые вы хотите игнорировать
  3. нажмите клавишу "esc", чтобы выйти из режима редактирования
  4. введите ":wq " затем нажмите Enter сохранить и выйти

файл выглядит примерно так:

runtime
cache
attachments
assets

сначала удалите его...

если ваш каталог foo уже находится под контролем версий, удалите его сначала с помощью:

svn rm --keep-local foo

...затем игнорировать:

svn propset svn:ignore foo .

...и если вы хотите игнорировать более одного каталога (скажем build/temp/ и *.tmp файлы), вы можете сделать это в два этапа (игнорируя первый и редактировать игнорировать свойства (см. другие ответы здесь) или можно написать что-то вроде

svn propset svn:ignore "build
temp
*.tmp" .

в командной строке.

Если вы используете конкретный клиент SVN TortoiseSVN, затем при фиксации у вас есть возможность щелкнуть правой кнопкой мыши элементы и выбрать "Добавить в список игнорирования".

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

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

эта команда будет игнорировать все, что им cache,tmp,null и and_so_on в текущем каталоге.

У меня были проблемы с получением вложенных каталогов для игнорирования; верхний каталог, который я хотел игнорировать, не будет отображаться с "статусом svn", но все субдиры сделали это. Это, вероятно, самоочевидно для всех остальных, но я думал, что поделюсь этим:

пример:

/ trunk

/ trunk / cache

/ trunk / cache / subdir1

/ trunk / cache / subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

Bash oneliner для нескольких игнорирует:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

Если ваш каталог проекта называется / Project, а ваш каталог кэша называется /Project/Cache, то вам нужно установить свойство subversion на /Project. Имя свойства должно быть" svn:ignore", а значение свойства - "Cache".

смотрите этой страница в руководстве Subversion для получения дополнительной информации о свойствах.

ответ Джейсона сделает трюк. Однако, вместо того, чтобы установить свойство SVN:игнорировать "."в каталоге кэша вы можете включить "кэш" в родитель каталог svn: игнорировать свойство, в случае, если каталог кэша не всегда присутствует. Я делаю это на нескольких "одноразовых" папках.

"спасибо" svn для такого отвратительного, фиктивного и трудного способа игнорировать файлы.

поэтому я написал скрипт svn-игнорировать-все:

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

кроме того, чтобы игнорировать конкретный список файлов / путей, мы можем использовать этот вариант svn-игнорировать. Я думаю, что svn-ignore-all действительно должен быть похож на xargs svn-ignore.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

еще одна вещь: я, как правило, загрязняю свои проверки svn многими случайными файлами. Когда пришло время совершить, я переместите эти файлы в 'старой' подкаталог, и сказать в SVN игнорировать "старые".

ЧТОБЫ СОХРАНИТЬ КАТАЛОГИ, КОТОРЫЕ SVN БУДЕТ ИГНОРИРОВАТЬ:

  1. это приведет к удалению файлов из репозитория, но сохранить каталог под управлением SVN:

svn delete --keep-local path/directory_to_keep/*

  1. затем установите игнорировать каталог (и все содержимое):

svn propset svn: игнорировать " * " путь / directory_to_keep

Если вы используете интерфейс для SVN, например TortoiseSVN, или какую-то интеграцию IDE, в том же меню должна быть опция ignore, что и операция commit/add.

установите svn: ignore свойства. Большинство инструментов UI svn имеют способ сделать это, а также обсуждение командной строки в ссылке.

Так как вы используете версии это на самом деле очень легко:

  • просмотр извлеченной копии
  • щелкните каталог, чтобы игнорировать
  • в поле "игнорировать" щелкните правой кнопкой мыши изменить
  • тип *.* игнорировать все файлы (или *.jpg для просто JPG файлы, и т. д.)

следите за своими косыми чертами тоже. Я обнаружил, что в том числе images/* в моем файле настроек игнорирования не игнорировал ./images/. Когда я бежал svn status -u но ? images. Итак, я просто изменил параметр игнорировать на просто images, без косых черт. Запустил проверку состояния,и это очистило его.

решить затмение следующим образом:

прежде всего, выполните синхронизацию вашей папки с проектом:

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

сначала пусть образец структуры

$ svn st ? проект / магистраль / цель ? проект/багажник/мой_файл.x

1-сначала настроить редактор, в mycase vim экспорт SVN_EDITOR=vim

2 - "svn propedit svn: ignore project / trunk/" откроет новый файл, и вы можете добавить свои файлы и подкаталог в US case type "цель" сохранить и закрыть файл и работает

$ svn st ? проект/багажник/мой_файл.x

спасибо.

Comments

    Ничего не найдено.