«Невозможно извлечь один файл. Самый лучший уровень проверок, который вы можете сделать, находится на уровне каталога».
Как мне обойти эту проблему при использовании Subversion?
У нас есть эта папка в Subversion, где мы храним все наши изображения. Я просто хочу проверить один файл (изображение) из этого. Эта папка действительно большая и содержит множество других вещей, которые мне сейчас не нужны.
svn
version-control
BlueGene
источник
источник
svn up
в локальный каталог на своем компьютере.Ответы:
Простой ответ заключается в том, что вы
svn export
файл вместо того, чтобы проверить его.Но это может быть не то, что вы хотите. Возможно, вы захотите поработать с файлом и проверить его снова, без необходимости загружать ненужную ГБ.
Если у вас Subversion 1.5+, тогда сделайте небольшую проверку:
Для более старой версии SVN вы можете воспользоваться следующими преимуществами:
Альтернатива (например, если в каталоге слишком много мусора прямо из ревизии, в которой он был создан) - сделать копию URL-> URL-адреса нужного вам файла в новом месте в хранилище (фактически это рабочая ветвь). файла). Проверьте этот каталог и сделайте ваши изменения.
Я не уверен, сможете ли вы затем объединить вашу измененную копию обратно в хранилище без рабочей копии цели - мне это никогда не требовалось. Если так, то сделай это.
Если нет, то, к сожалению, вам, возможно, придется найти кого-то другого, у которого действительно есть весь каталог, и заставить его сделать это. Или, может быть, к тому времени, когда вы внесете свои изменения, остальная часть закончит загрузку ...
источник
svn export
чем веб-интерфейс, если я знаю, какой файл мне нужен. Спрашивающий уже использует SVN, поэтому я думаю, что это зависит от того, какой клиент и насколько легко использовать этот клиентsvn export
. Я считаю, что веб-интерфейс лучше для просмотра, чемsvn ls
:-)Попробуй
svn export
вместоsvn checkout
. Это работает для отдельных файлов.Причина ограничения заключается в том, что
checkout
создается рабочая копия, которая содержит метаинформацию о хранилище, ревизии, атрибутах и т. Д. Эти метаданные хранятся в подкаталогах с именем «.svn». И отдельные файлы не имеют подкаталогов.источник
svn
не будут выполнять экспорт в один файл.svn cat $url_to_file_in_repo > $local_file_name
.Используйте
svn cat
илиsvn export
.Для этого вам не нужно извлекать рабочий каталог, но вы не сможете зафиксировать любые сделанные вами изменения. Если вам нужно внести изменения и зафиксировать их, вам нужен рабочий каталог, но вам не нужно извлекать его полностью. Извлеките ревизию, в которой каталог был еще / почти пуст, а затем используйте 'svn cat', чтобы извлечь файл из HEAD.
источник
svn cat svn://.../my_file.txt
было именно то, что я искал. Я работаю вsvn://
единственном (нетhttp://
) репозитории, и, похоже, новейшие интерфейсы websvn не обеспечивают загрузку необработанного файла (или у нас он неправильно настроен, или я слепой). Проще сделать это, чемcheckout
+up
просто для загрузки файла.Источник
источник
curl
илиwget
.Ниже приводится эквивалентное решение 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»). Теперь в репозитории щелкните правой кнопкой мыши по одному файлу, который вы хотите получить отдельно, и выберите опцию «Обновить элемент до ревизии». Один файл теперь может быть обработан и возвращен в хранилище.
Надеюсь, это поможет.
источник
Вы можете сделать это в два этапа:
Извлечь пустой SVN-репозиторий только с метаинформацией:
Запустите,
svn up
чтобы обновить указанный файл:источник
Обновление на случай, если вам действительно нужно, может быть включено в файл, извлеченный из другой папки.
Начиная с SVN 1.6 вы можете создавать внешние файлы , своего рода ссылки на SVN. Это означает, что у вас может быть другая версионная папка с одним файлом. Внесение изменений в файл в извлечении из этой папки также возможно.
Это очень просто, извлеките папку, в которую вы хотите включить файл, и просто добавьте свойство в папку
с таким содержанием:
После того, как вы подтвердите это, файл появится в будущих извлечениях папки. В основном это работает, но есть некоторые ограничения, как описано в документации, указанной выше.
источник
Перейдите в браузер репозитория, щелкните правой кнопкой мыши файл и используйте «Сохранить как», хотя я использую TortoiseSVN.
источник
(Изменить имя файла.log)
источник
Ответ Стива Джессопа не сработал для меня. Я читаю файлы справки для SVN, и если у вас просто есть изображение, вы, вероятно, не захотите проверять его снова, если вы не используете Photoshop, поэтому экспортируйте - это лучшая команда, чем извлечение, поскольку она не версионная (но это незначительно).
И --depth ARG должен быть не пустым, а файлами, чтобы получить файлы в ближайшем каталоге. Таким образом, вы получите все поля, не только одно, но пустое ничего не возвращает из хранилища.
или
Что касается других ответов, cat позволяет вам читать контент, который хорош только для текста, а не изображения всех вещей.
источник
--depth empty
том, что другие файлы не должны быть извлечены, и вы можете получить только один файл сsvn up <source/file>
. Приsvn export
этом нет необходимости делать это, просто укажите файл.Я бы просто просмотрел его и экспортировал один файл. Если у вас есть доступ HTTP, просто используйте веб-браузер, чтобы найти файл и взять его.
Если вам нужно вернуть его после редактирования, это может быть немного более утомительным, но я уверен, что может быть
svn import
функция ...источник
Сделайте что-то вроде этого:
По сути, идея заключается в создании каталога, в который вы хотите получить файл из SVN. Используйте
svn cat
команду и перенаправьте вывод в файл с тем же именем. По умолчанию кошка будет сбрасывать информацию на stdio.источник
Если вы просто хотите файл без информации о ревизии, используйте
источник
С Subversion 1.5 становится возможным извлекать (все) файлы каталога без проверки каких-либо подкаталогов (различные флаги --depth). Не совсем то, что вы просили, но форма «меньше всего».
источник
Используя метод разреженного извлечения, вы МОЖЕТЕ проверить конкретный файл, который уже извлечен или существует ... с помощью простого трюка:
После проверки верхнего уровня вашего репозитория с помощью опции «только этот элемент» в проводнике Windows вы ДОЛЖНЫ сначала щелкнуть правой кнопкой мыши файл, который необходимо обновить; выберите Repo Browser в контекстном меню; найдите этот файл СНОВА в браузере хранилища и щелкните правой кнопкой мыши. Теперь вы должны увидеть «обновить элемент до ревизии» в контекстном меню.
Я не уверен, что это недокументированная функция или просто ошибка. Мне понадобилось много времени после работы, чтобы наконец найти этот трюк. Я использую TortoiseSVN 1.6.2.
источник
Я хотел извлечь один файл в каталог, который не был частью рабочей копии.
Получим файл по следующему URL: http: //subversion.repository.server/repository/module/directory/myfile
Поэтому я проверил заданный каталог, содержащий целевой файл, который я хотел получить в фиктивном каталоге (скажем, etcb для URL, заканчивающегося на
/etc
).Затем я очистил файл .svn / records от всех файлов целевого каталога, которые мне не нужны, чтобы оставить только файл, который я хотел. В этом файле .svn / records у вас есть запись для каждого файла с его атрибутами, поэтому оставьте только запись, касающуюся файла, который вы хотите получить и сохранить.
Теперь вам нужно просто скопировать «.svn» в каталог, который будет новой «рабочей копией». Тогда вам просто нужно:
Теперь каталог находится под контролем версий. Не забудьте удалить каталог directoryb, который был просто «временной рабочей копией».
источник
Поскольку ни один из других ответов не работал для меня, я сделал это, используя этот хак:
Это создаст новую локальную папку, в которой будут только файлы с удаленного пути. Затем вы можете сделать символическую ссылку на файлы, которые вы хотите иметь здесь.
источник
svn co
один файл, чтобы избежать полного каталога, полного файлов изображений. Кроме того, добавление символической ссылки может только увеличить сложность, переход из временного каталога может сработать, но вам все равно придется проверить весь каталог изображений только для одного изображения. У @ steve-jessop была правильная идеяЭта проблема покрыта:
http://subversion.tigris.org/issues/show_bug.cgi?id=823
Прилагается скрипт, который позволяет вам извлекать один файл из SVN, вносить изменения и фиксировать изменения обратно в хранилище, но вы не можете запустить «SVN» для извлечения остальной части каталога. Он был протестирован с SVN-1.3, 1.4 и 1.6.
источник
Если вы просто хотите экспортировать файл, и вам не нужно будет обновлять его позже, вы можете сделать это без использования команд SVN.
Используя TortoiseSVN Repository Browser , выберите файл, щелкните правой кнопкой мыши, а затем выберите « Копировать URL в буфер обмена ». Вставьте этот URL в ваш браузер, и после входа в систему вам будет предложено загрузить файл.
Таким образом, вы также можете выбрать нужную версию и загрузить старую версию файла.
Обратите внимание, что это действительно, если ваш сервер SVN имеет веб-интерфейс.
источник