Извлечение одного файла из Subversion

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

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

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

19 ответов


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

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

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

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

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

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

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

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

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


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

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


использовать svn cat или svn export.

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


Если вы хотите просмотреть readme.txt в свою репозиторий без проверки:

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

Совет: Если ваша рабочая копия устарела (или у вас есть локальные модификации) и вы хотите увидеть главный пересмотр a файл в вашей рабочей копии, svn cat автоматически принесет голову редакция, когда вы даете ему путь:

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

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

источник


эквивалентное решение TortoiseSVN принятого ответа (я написал это во внутреннем документе для своей компании, поскольку мы недавно принимаем SVN) следует. Я подумал, что было бы полезно поделиться здесь:

проверка одного файла: Subversion не поддерживает проверку одного файла, она поддерживает только проверку структур каталогов. (Ссылка: http://subversion.tigris.org/faq.html#single-file-checkout). Это потому, что с каждым каталог, который извлекается как рабочая копия, метаданные, касающиеся изменений / ревизий файлов, хранятся как внутренняя скрытая папка (.svn / _svn). В настоящее время это не поддерживается (v1.6) для одиночных файлов.

альтернативная рекомендуемая стратегия: вам придется сделать часть каталога checkout только один раз, после чего вы можете напрямую перейти и проверить свои отдельные файлы. Выполните разреженную проверку родительской папки и структуры каталогов. Разреженная проверка в основном проверка только структуры папок без заполнения файлов содержимого. Таким образом, вы проверяете только структуры каталогов и не должны проверять все файлы, как это было проблемой. Ссылка: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Шаг 1: перейдите в браузер репозитория

Шаг 2: щелкните правой кнопкой мыши родительскую папку в репозитории, содержащую все файлы, над которыми вы хотите работать и выберите дальше.

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

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

Я надеюсь, что это помогает.


вы можете сделать это в два шага:

  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
    

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

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

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

svn propedit svn:externals .

с содержанием вроде этого:

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

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


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


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."

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

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

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

или

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

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


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

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


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

svn export <URL>

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


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

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

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

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


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

после проверки верхнего уровня вашего репозитория с помощью опции "только этот пункт" в проводнике Windows вы должны сначала щелкнуть правой кнопкой мыши на файле, который вам нужно обновить; выберите Repo Browser в контекстном меню; снова найти этот файл в браузере репозитория и щелкните правой кнопкой мыши. Теперь вы должны увидеть "обновить элемент до редакции" в контексте меню.

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


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

давайте получим файл по следующему URL:http://subversion.хранилище.сервер / репозиторий / модуль / каталог / myfile

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

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

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

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

cp .svn /directory
cd /directory
svn update myfile

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


сделать что-то вроде этого:

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.


этот вопрос рассматривается в:

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

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


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

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

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