it-swarm.com.ru

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

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

Как обойти эту проблему при использовании Subversion?

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

308
bluegene

Простой ответ заключается в том, что вы svn export файл вместо того, чтобы проверить его.

Но это может быть не то, что вы хотите. Возможно, вы захотите поработать над файлом и снова зарегистрировать его, не загружая ненужную ГБ.

Если у вас Subversion 1.5+, тогда сделайте небольшую проверку:

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

Для более старой версии SVN вы можете воспользоваться следующими преимуществами:

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

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

Я не уверен, сможете ли вы затем объединить вашу измененную копию обратно в хранилище без рабочей копии цели - мне это никогда не требовалось. Если так, то сделай это.

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

389
Steve Jessop

Попробуйте svn export вместо svn checkout. Это работает для отдельных файлов.

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

106
Mnementh

Используйте svn cat или svn export.

Для этого вам не нужно извлекать рабочий каталог, но вы не сможете зафиксировать внесенные вами изменения. Если вам нужно внести изменения и зафиксировать их, вам нужен рабочий каталог, но вам не нужно извлекать его полностью. Извлеките ревизию, в которой каталог был еще/почти пуст, а затем используйте 'svn cat', чтобы извлечь файл из HEAD.

53
Milan Babuškov

Если вы хотите просмотреть 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
Последняя редакция свежая из репозитория!

Источник

12
GEOCHET

Ниже приведено эквивалентное решение 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 : щелкните правой кнопкой мыши родительскую папку в репозитории, содержащую все файлы, с которыми вы хотите работать, и выберите "Оформить заказ".

Шаг 3 : в новом всплывающем окне убедитесь, что каталог проверки указывает на правильное местоположение на вашем локальном ПК. Также будет раскрывающееся меню с надписью "глубина проверки". Выберите "Только этот элемент" или "Непосредственные дети, включая папки", в зависимости от ваших требований. Второй вариант рекомендуется, так как, если вы хотите работать с вложенной папкой, вы можете напрямую перейти в следующий раз, в противном случае вам придется повторить всю эту процедуру еще раз для вложенной папки.

Шаг 4 . Теперь родительские папки должны быть доступны в выбранной вами папке и теперь отслеживаются с помощью SVN (скрытой папки ".svn"). "Или" _svn "теперь должны присутствовать). Теперь в репозитории щелкните правой кнопкой мыши по одному файлу, который вы хотите получить отдельно, и выберите опцию "Обновить элемент до ревизии". Один файл теперь может быть обработан и возвращен в хранилище.

Надеюсь, это поможет.

8
Kaushik Gopal

Вы можете сделать это в два этапа:

  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
user2920375

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

Начиная с SVN 1.6 вы можете сделать внешний файл , своего рода svn-ссылки. Это означает, что у вас может быть другая версионная папка, содержащая один файл. Внесение изменений в файл в извлечении из этой папки также возможно.

Это очень просто, извлеките папку, в которую вы хотите включить файл, и просто добавьте свойство в папку

svn propedit svn:externals .

с таким содержанием:

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

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

5
Mikkel Blanné

Я бы просто просмотрел его и экспортировал один файл. Если у вас есть доступ HTTP, просто используйте веб-браузер, чтобы найти файл и взять его.

Если вам нужно вернуть его после редактирования, это может быть немного более утомительным, но я уверен, что там может быть функция svn import ...

4
Oli

Перейдите в браузер репозитория, щелкните правой кнопкой мыши файл и используйте "Сохранить как", хотя я использую TortoiseSVN.

4
Dave Anderson

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

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

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

или же

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

Что касается других ответов, cat позволяет вам читать контент, который хорош только для текста, а не изображения всех вещей.

4
Vass

Если вы просто хотите файл без информации о ревизии, используйте

svn export <URL>
2
Ted

С Subversion 1.5 становится возможным извлекать (все) файлы каталога без проверки каких-либо подкаталогов (различные флаги --depth). Не совсем то, что вы просили, но форма "меньше всего".

2
jackr

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

Используя TortoiseSVN Repository Browser, выберите файл, щелкните правой кнопкой мыши, а затем выберите "Скопировать URL в буфер обмена". Вставьте этот URL в ваш браузер, и после входа в систему вам будет предложено загрузить файл.

Таким образом, вы также можете выбрать нужную версию и загрузить старую версию файла.

Обратите внимание, что это действительно, если ваш сервер SVN имеет веб-интерфейс.

1
Daniel

Я хотел извлечь один файл в каталог, который не был частью рабочей копии.

Получим файл по следующему URL: http: //Subversion.repository.server/repository/module/directory/myfile

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

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

Затем я очистил файл . Svn/records от всех файлов целевого каталога, которые мне не нужны, чтобы оставить только файл, который я хотел. В этом файле . Svn/records у вас есть запись для каждого файла с его атрибутами, поэтому оставьте только запись, касающуюся файла, который вы хотите получить и сохранить. ,.

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

cp .svn /directory
cd /directory
svn update myfile

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

1
hendergassler

Сделайте что-то вроде этого:

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.

1
Manish Singh

Используя метод разреженного извлечения, вы МОЖЕТЕ проверить конкретный файл, который уже извлечен или существует ... с помощью простого трюка:

После извлечения верхнего уровня вашего хранилища с помощью опции "только этот элемент" в Windows Explorer вы ДОЛЖНЫ сначала щелкнуть правой кнопкой мыши файл, который необходимо обновить; выберите Repo Browser в контекстном меню; найдите этот файл СНОВА в браузере хранилища и щелкните правой кнопкой мыши. Теперь вы должны увидеть "обновить элемент до ревизии" в контекстном меню.

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

1
devXen

Эта проблема покрыта:

http://Subversion.tigris.org/issues/show_bug.cgi?id=82

Прилагается скрипт, который позволяет вам извлекать один файл из SVN, вносить изменения и фиксировать изменения обратно в хранилище, но вы не можете запустить "SVN" для извлечения остальной части каталога. Он был протестирован с SVN-1.3, 1.4 и 1.6.

0
ddkilzer

Поскольку ни один из других ответов не работал для меня, я сделал это, используя этот хак:

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

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

0
Lacho Tomov