Папка ігнорування 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.