Оформить заказ одним файлом из Subversion - PullRequest
308 голосов
/ 23 сентября 2008

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

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

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

Ответы [ 19 ]

389 голосов
/ 23 сентября 2008

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

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

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

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

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

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

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

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

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

105 голосов
/ 23 сентября 2008

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

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

53 голосов
/ 23 сентября 2008

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

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

12 голосов
/ 23 сентября 2008

Если вы хотите просмотреть readme.txt в вашем хранилище без проверки:

$ svn cat http://svn.red -bean.com / репо / тест / readme.txt
Это файл README. Вы должны прочитать это.

Совет: Если ваша рабочая копия устарела (или у вас есть локальные модификации) и Вы хотите увидеть ревизию ГОЛОВНОЙ файл в вашей рабочей копии, svn cat автоматически получит ГОЛОВУ ревизия при указании пути:

$ cat foo.c
Этот файл в моем местном рабочая копия и имеет изменения, которые Я сделал.

$ svn cat foo.c
Последняя редакция свежая из хранилища!

Источник

8 голосов
/ 02 декабря 2009

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

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

6 голосов
/ 30 октября 2013

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

  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
    
5 голосов
/ 20 октября 2010

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

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

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

svn propedit svn:externals .

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

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

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

4 голосов
/ 28 августа 2010

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

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

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

или

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

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

4 голосов
/ 15 декабря 2008
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

(Изменить имя файла.log)

svn commit -m "this is a comment."
4 голосов
/ 23 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...