Папка ігнорування SVN-каси


98

Чи можу я проігнорувати папку під час замовлення на svn? Мені потрібно ігнорувати папку DOC під час оформлення замовлення на моєму сервері побудови.

редагувати: Ігнорувати зовнішні не є варіантом. У мене є зовнішні, які мені потрібні.



Чи відповідає це на ваше запитання? Як ігнорувати каталог із SVN?
Готьє

Відповіді:


104

Ви не можете безпосередньо ігнорувати папки під час оформлення каси, але ви можете використовувати рідкі каси в svn 1.5. Наприклад:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Це дозволить перевірити файли та каталоги зі стовбура вашого проекту у "my_checkout", але не повторитись у цих каталогах. Наприклад:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Потім, щоб зменшити вміст 'bar' вниз:

$ cd bar && svn update --set-depth infinity

Примітка. У деяких 1.5 версіях виникла помилка, яка перешкоджала цьомуsvn: Shallowing of working copy depths is not yet supported
gcb

79

Так, ви можете використовувати SVN 1.6. Спочатку потрібно зробити замовлення, а потім позначити папку для виключення, а потім видалити непотрібну папку.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

Відтепер будь-які оновлення робочої копії не будуть повторно заселяти папку документів.

Дивіться http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ та http://subversion.apache.org/docs/release-notes/1.6.html#sparse- вилучення каталогу для отримання більш детальної інформації.

Том


2
Оновлено, тому що це врятувало мене від необхідності перевірити величезну папку, яка не стосувалася моєї роботи.
dohpaz42

1
Це чудово, разом із очищенням svn це врятувало мені 12 Гб.
JonnyJD

1
Це все ще не перевіряє все спочатку?
Хуанізм

9

З версіями до 1.5 я виявив, що якщо ви оформили лише найвищу папку, а потім вибірково оновлювались, відтепер оновлення впливають лише на те, що ви перевірили. Тобто

svn co -N foo
cd foo
svn up -N bar
svn up

Прапор -N робить операцію нерекурсивною. Вищезгадане не перевірить нічого іншого на рівні foo, наприклад. скажімо, є папка lala, остаточний svn up не перевірить цю папку, але оновиться bar.

Але пізніше ви можете svn up lalaі таким чином додати його до каси.

Імовірно, це також працює з 1.5.


6

Це у клієнта TortoiseSVN 1.7.1 (можливо, він буде доступний і в старих версіях):

  • Оформлення SVN -> Виберіть URL-сховище

  • Клацніть на "Оформити замовлення" (у розділі Глибина замовлення) та виберіть лише необхідні папки!


4

Ви можете помістити папку "Документи" у зовнішній сховище, а потім використовувати svn checkout --ignore-externals.


Це ми закінчили робити, щоб пропустити деякі попередньо складені компоненти в попередній роботі.
Марк Бессі

2
Я не розумію, що external repositoryозначає. Ви можете пояснити це?
Віктор

4

Так, Subversion 1.5 має функцію під назвою « Рідкі каси», які можуть робити саме такі речі.


2
Зважаючи на це, схоже, що рідкісні каси обмежують лише глибину оформлення каси. Вони не можуть ігнорувати одну конкретну папку.
Джон Міллікін

Звичайно, можливо, вам доведеться зробити трохи додаткових робіт, наприклад обмежити глибину батьківської папки з --depth neposredtes, а потім перевірити всі інші папки, крім тієї, яку ви хочете проігнорувати. Справа в тому, що інструменти є, якщо вам потрібно їх використовувати.
Грег Хьюгілл

Я вдячний згадкою SparseCheckouts, і це точно точно, але ця відповідь не стосується початкового питання. Звичайно, я можу перевірити один файл одночасно, і це призведе до отримання локальних копій певних файлів, які я хочу, але який біль у дупі повинен робити кожен окремо. Я вважаю, що автор цього питання запитує про ігнорування певної папки, а не глибини x папок, і дозволяє комп'ютеру виконувати роботу - ту саму роботу, яку ви рекомендуєте, можна виконати вручну.
barrypicker

Версії 1.6+ надають додаткову можливість ігнорувати папки та більш загально керувати тим, що потрібно включити / виключити у робочій копії (де v1.5 в цьому дуже обмежено) svnbook.red-bean.com/en/1.7/svn. Advanced.sparsedirs.html
FruitBreak

3

Я знайшов це питання шукаючи спосіб перевірити джерела WebKit, виключаючи регресійні тести. Я закінчив таке:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Зауважте, ви можете змінювати виключення, як вважаєте за потрібне, але. * Рекомендується пропустити робочий каталог (який уже актуальний) та всі каталоги .svn.


що це за мова?
Щеня

це команди оболонки Unix (їх також можна зберегти та виконати як файл сценарію)
mrlem

2

Я нещодавно вирішив те саме завдання. Ідея полягає у тому, щоб негайний список папок / файлів у сховищі виключав потрібні записи, а потім перевіряв решту папок та оновлював безпосередні файли, якщо такі є. Ось рішення:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Змінити вихідний робочий каталог. Скопіюйте команди. Вставити. Змініть відповідну URL-адресу та виключіть шаблон. Виконайте команду.

Дякую,


1
ей, що 6 років для розробників? На останньому рядку у вас є $ ubrpath. Де цей набір?
D-Klotz

1
@ D-Klotz, дякую, натомість має бути $ rpath, який, у свою чергу, встановлений у шлях до сховища. <br/> Вибачте за пізній рік
Bv.

1

Ні, ігнорування призначене лише для додавання файлів.
Ви можете використовувати рідкі каси (якщо ви використовуєте svn 1.5)


1

Як уже згадували деякі інші, ви можете просто використовувати властивості svn: externals, а потім опцію --ignore-externals під час оформлення замовлення. Однак слід зазначити, що svn: externals не обов'язково посилається на інше сховище. Це може бути посилання на якусь іншу папку того ж репо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.