Оформити один файл із Subversion


320

"Неможливо перевірити один файл. Найкращий рівень перевірки, який ви можете зробити, знаходиться на рівні каталогу."

Як вирішити цю проблему під час використання Subversion?

У нас є ця папка в Subversion, де ми зберігаємо всі наші зображення. Я просто хочу перевірити один файл (зображення) з цього. Ця папка дійсно велика і містить багато інших матеріалів, які мені зараз не потрібні.


Ви можете це зробити іншим способом. Увійдіть на виробничий сервер та svn upу свій локальний каталог на комп’ютері.
Неокортекс

Відповіді:


403

Проста відповідь полягає в тому, що ви svn exportфайл замість перевірки.

Але це може бути не те, що ви хочете. Можливо, ви захочете попрацювати над файлом і перевірити його знову, не завантажуючи ГБ непотрібних вам ГБ.

Якщо у вас Subversion 1.5+ або більше, то зробіть невелику перевірку:

svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>

Для старшої версії SVN ви можете скористатися наступною:

  • Ознайомтеся з каталогом, використовуючи версію ще в далекому минулому, коли він був менш наповнений непотрібним.
  • Оновіть потрібний файл, щоб створити змішану версію. Це працює, навіть якщо файл не існував у переглянутій вами редакції.
  • Прибуток!

Альтернативою (наприклад, якщо в каталозі є занадто багато небажаного виду з редакції, в якій він був створений), є зробити URL-> URL-копію потрібного файлу на нове місце в сховищі (фактично це робоча гілка файлу). Перегляньте цей каталог і внесіть свої зміни.

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

Якщо ні, то, на жаль, вам, можливо, доведеться знайти когось іншого, у кого є весь каталог, і перевірити їх. А може, до моменту, коли ви внесли свої зміни, інша частина закінчила завантаження ...


13
Дійсно просте рішення - отримати доступ до сховища за допомогою веб-браузера.
долмен

11
@dolmen - якщо припустити, що не потрібно змінювати файл (можливо, для цього репозиторію працює веб-інтерфейс). Я використовую командний рядок SVN, так що для мене це простіше у використанні , svn exportніж використовувати веб - інтерфейс, якщо я знаю , що файл я хочу. Опитувач вже використовує SVN, тому я думаю, це залежить від того, який клієнт і чи спрощує його клієнт svn export. Я вважаю веб-інтерфейс кращим для перегляду, ніж svn ls:-)
Стів Джессоп

2
Клієнт SmartSVN блокує окремі файли, якщо ваш Subversion Server підтримує його. І є гачки, які вимагають перевірки, перш ніж бінарний / виконуваний файл можна буде перевірити. Це насправді не означає, що двоє людей можуть змінити бінарний штраф і об'єднати ці зміни разом. Це можуть бути нові функції, які були недоступні, коли було задано це питання.
TamusJRoyce

@Tamus: "Це не має сенсу" погодився, але у випадках, які я описую, об'єднання полягає лише у тому, щоб повернути нову версію в початкове місце. Не очікується, що двійковий файл був змінений у цілі злиття. Таким чином, сам файл не потребує "злиття", крім заміни старої версії на нову, це саме те, що SVN називає його, і він записує, звідки зміни відбулися для подальшого ознайомлення. Ви маєте рацію, уникнення конфліктів може бути застосовано, заблокувавши файл на час.
Стів Джессоп

1
TortoiseSVN може перевіряти окремі файли. Я вважаю, що це робить те саме за кадром, щоб досягти цього.
Майк Старов

109

Спробуйте svn exportзамість svn checkout. Це працює для окремих файлів.

Причиною обмеження є те, що checkoutстворюється робоча копія, яка містить метаінформацію про сховище, версію, атрибути тощо. Ці метадані зберігаються у підкаталогах під назвою '.svn'. І поодинокі файли не мають підкаталогів.


2
Caveat: Надзвичайно старі версії svnне експортують одного файлу.
Младен Ябланович

5
Це найкращий метод, якщо ви просто хочете захопити останню версію певного сценарію як частину розгортання чи щось.
william.berg

2
Цей застереження був розтягнутим ще в 2011 році, але надзвичайно старі версії можуть зробити svn cat $url_to_file_in_repo > $local_file_name.
cprn

53

Використовуйте svn catабо svn export.

Для цього вам не потрібно отримати робочий каталог, але ви не зможете здійснити будь-які внесені вами зміни. Якщо вам потрібно внести зміни та скористатись ними, вам потрібен робочий каталог, але не потрібно його повністю отримувати. Ознайомтесь з версією, де каталог був ще / майже порожній, а потім скористайтеся 'svn cat', щоб витягти файл з HEAD.


svn cat svn://.../my_file.txtбуло саме те, що я шукав. Я працюю в svn://єдиному http://сховищі (немає ), і, схоже, новітні інтерфейси websvn не забезпечують завантаження нераціонального файлу (або у нас це неправильно налаштовано, або я сліпий). Це зробити простіше, ніж checkout+ upпросто для завантаження файлу.
рибамар

12

Якщо ви хочете переглянути readme.txt у вашому сховищі, не перевіряючи його:

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
Це файл README. Ви повинні прочитати це.

Порада: Якщо ваша робоча копія застаріла (або у вас є місцеві модифікації) і ви хочете побачити перегляд файлу HEAD у вашій робочій копії, svn cat автоматично отримає редакцію HEAD, коли ви надасте їй шлях:

$ cat foo.c
Цей файл є моєю місцевою робочою копією та має внесені вами зміни.

$ svn cat foo.c
Остання редакція, свіжа зі сховища!

Джерело


Ви також можете безпосередньо використовувати будь-який клієнт HTTP. Ваш веб-браузер або інструмент командного рядка, такий як curlабо wget.
долмен

9

Наступне рішення TortoiseSVN з прийнятої відповіді (я це написав у внутрішньому документі для моєї компанії, коли ми нещодавно приймаємо SVN). Я подумав, що було б корисно поділитися і тут:

Перевірка одного файлу: Subversion не підтримує перевірку одного файлу, він підтримує лише перевірку структур каталогів. (Довідка: http://subversion.tigris.org/faq.html#single-file-checkout ). Це тому, що у кожному каталозі, який перевіряється як робоча копія, метадані щодо модифікацій / ревізій файлів зберігаються як внутрішня прихована папка (.svn / _svn). Наразі це не підтримується (v1.6) для окремих файлів.

Альтернативна рекомендована стратегія: Вам потрібно буде виконати частину каталогу каталогу лише один раз, після чого ви можете безпосередньо перейти та оформити свої окремі файли. Зробіть розріджену перевірку батьківської папки та структури каталогів. Рідка перевірка - це в основному перевірка лише структури папок без заповнення файлів вмісту. Таким чином, ви перевіряєте лише структури каталогів і не потрібно перевіряти ВСІ файли, як це стосувалося. Довідка: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Крок 1 : Перехід до браузера сховища

Крок 2 : Клацніть правою кнопкою миші батьківську папку в сховищі, що містить усі файли, над якими ви хочете працювати, і виберіть Checkout.

Крок 3 : У новому спливаючому вікні переконайтесь, що каталог каси вказує на правильне місце на вашому локальному ПК. Також з'явиться спадне меню з написом "Глибина замовлення". Виберіть "Тільки цей елемент" або "Негайні діти, включаючи папки", залежно від вашої потреби. Рекомендується другий варіант, оскільки, якщо ви хочете працювати над вкладеною папкою, ви можете безпосередньо продовжити наступного разу, інакше вам доведеться повторити цю всю процедуру ще раз для вкладеної папки.

Крок 4 : Батьківські папки (і) тепер повинні бути доступними у локально вибраній папці і тепер контролюються за допомогою SVN (тепер має бути прихована папка ".svn" або "_svn"). У репозиторії зараз клацніть правою кнопкою миші один файл, який ви хочете перевірити самостійно, і виберіть опцію "Оновити елемент до перегляду". Зараз над одним файлом можна працювати і перевіряти його назад у сховище.

Я сподіваюся, що це допомагає.


8

Ви можете зробити це в два етапи:

  1. Оформити порожнє сховище SVN з метаінформацією:

    $ cd /tmp
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
    
  2. Запустити, svn upщоб оновити вказаний файл:

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
    

6

Оновлення на випадок, якщо вам дійсно потрібно, можна покрити, включивши файл до каси іншої папки.

Оскільки SVN 1.6 ви можете робити зовнішні файли , своєрідні посилання svn. Це означає, що ви можете мати іншу версію з папкою, що включає один файл. Також можливе внесення змін до файлу в касі цієї папки.

Це дуже просто: огляньте папку, до якої потрібно включити файл, і просто додайте властивість до папки

svn propedit svn:externals .

із таким вмістом:

file.txt /repos/path/to/file.txt

Після виконання цього файлу файл з’явиться в майбутніх касах папки. В основному це працює, але є деякі обмеження, як описано в вищезазначеній документації.


4

Перейдіть до веб-переглядача репо, клацніть правою кнопкою миші файл і скористайтеся «Зберегти як», хоча я використовую TortoiseSVN.


4
cd C:\path\dir
svn checkout https://server/path/to/trunk/dir/dir/parent_dir--depth empty
cd C:\path\dir\parent_dir
svn update filename.log

(Редагувати filename.log)

svn commit -m "this is a comment."

4

Відповідь Стіва Джессопа не спрацювала для мене. Я читаю файли довідки для SVN, і якщо у вас просто зображення, ви, ймовірно, не хочете перевіряти його ще раз, якщо ви не робите Photoshop, тому експорт - це краща команда, ніж оформити замовлення, оскільки це неперевершено (але це незначно).

І - поглиблення ARG має бути не порожнім, а файлами для отримання файлів у безпосередньому каталозі. Так ви отримаєте всі поля, не лише одне, але порожнє не повертає нічого із сховища.

 svn co --depth files <source> <local dest>

або

svn export --depth files <source> <local dest>

Що стосується інших відповідей, то кішка дозволяє читати вміст, який корисний лише для тексту, а не для зображень усіх речей.


1
Суть --depth emptyполягала в тому, що інші файли не слід перевіряти, а потім можна отримати лише один файл svn up <source/file>. З svn exportцим робити це не потрібно, просто вкажіть файл.
Кевін Вермер

@reemrevnivek - ви праві. добре, що запитували лише про один файл, він працює без перевірки всього файлу структури каталогів, навіть якщо він порожній.
Vass

4

Я б просто переглядати його та експортувати єдиний файл. Якщо у вас є доступ до HTTP, просто використовуйте веб-браузер, щоб знайти файл і захопити його.

Якщо вам потрібно буде повернути його після редагування, це може бути дещо складніше, але я впевнений, що може бути svn importфункція ...


3

Зробіть щось подібне:

mkdir <your directory>/repos/test

svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt

В основному ідея полягає у створенні каталогу, куди потрібно захопити файл із SVN. Використовуйте svn catкоманду та перенаправляйте вихід на однойменний файл. За замовчуванням кішка скидає інформацію на stdio.


2

Якщо ви просто хочете, щоб файл не використовувався для редагування інформації

svn export <URL>

2

З Subversion 1.5 з'являється можливість перевірити (усі) файли каталогу, не перевіряючи жодних підкаталогів (різні --depth прапори). Не зовсім те, про що ви просили, але форма "менше всіх".


2

Використовуючи техніку розрідженої перевірки, ви МОЖЕТЕ перевірити певний файл, який уже перевірений або існує ... простим фокусом:

Після огляду верхнього рівня вашого сховища за допомогою параметра "лише цей елемент" у Windows Explorer ви ВИНАГАМО спочатку клацніть правою кнопкою миші файл, який потрібно оновити; у контекстному меню вибрати браузер Repo; знайдіть цей файл ПРОТИ в браузері сховища та клацніть правою кнопкою миші. Тепер у контекстному меню вам слід побачити "оновити елемент для перегляду".

Я не впевнений, чи це недокументована функція, чи просто помилка. Мені знадобилось довгий час після роботи, щоб нарешті знайти цю хитрість. Я використовую TortoiseSVN 1.6.2.


2

Я хотів занести один файл до каталогу, який не входив до робочої копії.

Давайте отримаємо файл за такою URL-адресою: http: //subversion.repository.server/repository/module/directory/myfile

svn co  http://subversion.repository.server/repository/module/directory/myfile /**directoryb**

Тож я перевірив даний каталог, що містить цільовий файл, з яким я хотів потрапити до фіктивного каталогу (скажімо etcb для URL, що закінчується /etc).

Потім я очистив файл .svn / записи з усіх файлів цільового каталогу, який мені не потрібен, залишити лише потрібний файл. У цьому .svn / записи вас є запис для кожного файлу з його атрибутами, тому залиште лише запис про файл, який ви хочете отримати та зберегти.

Тепер вам потрібно просто скопіювати '' .svn '' в каталог, який буде новою "робочою копією". Тоді вам просто потрібно:

cp .svn /directory
cd /directory
svn update myfile

Зараз каталог каталогів знаходиться під контролем версій. Не забудьте видалити каталог directoryb, який був просто "тимчасовою робочою копією".


Це не те, що робить рідкісний замовлення? Ви дійсно не повинні зламати файли в каталозі .svn вручну.
Лассе В. Карлсен

Можливо, але це вирішило проблему належним чином. Я гадаю, що це так, як має працювати управління версіями, а також обробляти файли як розширення каталогів. Спробуйте і скажіть, що не так у логіці. Я б запропонував команді з розвитку підривної програми розширити утиліту svn за допомогою цієї функції, вона вирішить проблеми всіх хлопців, які відповіли на цю тему.
hendergassler

2

Оскільки жоден з інших відповідей для мене не працював, я це зробив, використовуючи цей злом:

$ cd /yourfolder
svn co https://path-to-folder-which-has-your-files/ --depth files

Це створить нову локальну папку, у якій є лише файли з віддаленого шляху. Тоді ви можете зробити символічне посилання на файли, які ви хочете мати тут.


ОП запитала про svn coодин файл, щоб уникнути цілого каталогу, наповненого файлами зображень. Крім того, додавання символьної посилання може лише доповнити складність, переміщення з тимчасового каталогу може спрацювати, але ви все ще повинні перевірити весь каталог зображень лише для одного зображення. @ steve-jessop мав правильну ідею
Кріс Маротта

2
@ChrisMarotta ОП задало це питання 9 років тому. Тут ніхто не відповідає. Це загальна тема для подібної проблеми, і вона вже не має нічого спільного з оригінальною ОП. Люди приїжджають сюди, щоб знайти рішення власної проблеми. І коли вони їх прочитають, деякі з них опиняться в моїй ситуації, коли це було єдине правильне рішення. Тому я і розмістив його.
Лачо Томов

1
Я радий за цю відповідь, мені це допомогло
Леос Літерак

1

Це питання охоплюється:

http://subversion.tigris.org/isissue/show_bug.cgi?id=823

Додано скрипт, який дозволяє вам перевірити один файл із svn, внести зміни та здійснити зміни назад у сховище, але ви не можете запустити "svn up", щоб перевірити решту каталогу. Тестовано з svn-1.3, 1.4 та 1.6.


1

Якщо ви просто хочете експортувати файл, і вам не потрібно буде його оновлювати пізніше, ви можете це зробити, не використовуючи команди SVN.

Використання браузера сховища TortoiseSVN виберіть файл, клацніть правою кнопкою миші та виберіть " Скопіювати URL у буфер обміну ". Вставте цю URL-адресу у свій браузер, і після входу вам буде запропоновано завантажити файл.

Таким чином ви також можете вибрати бажану версію та завантажити старішу версію файлу.

Зауважте, що це дійсно, якщо ваш сервер SVN має веб-інтерфейс.

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