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

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

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

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

Ответ 1

Простой ответ: вы svn export файл, а не проверяете его.

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Источник

Ответ 5

Следующее эквивалентное решение 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. В новом всплывающем окне убедитесь, что каталог проверки указывает на правильное местоположение на вашем локальном ПК. Будет также выпадающее меню с надписью "глубина проверки". Выберите "Только этот элемент" или "Непосредственные дети, включая папки", в зависимости от ваших требований. Второй вариант рекомендуется, так как, если вы хотите работать с вложенной папкой, вы можете сразу перейти в следующий раз, иначе вам придется снова следовать этой всей процедуре для вложенной папки.

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

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

Ответ 6

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

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

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

svn propedit svn:externals .

с контентом вроде этого:

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

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

Ответ 7

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

  • Оформить заказ на пустой SVN-репозиторий с мета-информацией:

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

или

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

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

Ответ 11

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

(Edit filename.log)

svn commit -m "this is a comment."

Ответ 12

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

svn export <URL>

Ответ 13

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

Ответ 14

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

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

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

Ответ 15

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

Позвольте получить файл по следующему URL-адресу: http://subversion.repository.server/repository/module/directory/myfile

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

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

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

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

cp .svn /directory
cd /directory
svn update myfile

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

Ответ 16

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

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.

Ответ 17

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

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

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

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

Ответ 18

Эта проблема распространяется на:

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

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

Ответ 19

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

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

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