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

<p><strong>"невозможно извлечь один файл. наилучший уровень проверок, который вы можете сделать, находится на уровне каталога."</strong></p><p>как обойти эту проблему при использовании subversion?</p><p>у нас есть эта папка в subversion, где мы храним все наши изображения. я просто хочу проверить один файл (изображение) из этого. эта папка действительно большая и содержит множество других вещей, которые мне сейчас не нужны.</p>

<p>простой ответ заключается в том, что вы <code>svn export</code> файл вместо того, чтобы проверить его.</p><p>но это может быть не то, что вы хотите. возможно, вы захотите поработать над файлом и снова зарегистрировать его, не загружая ненужную гб.</p><p>если у вас subversion 1.5+, тогда сделайте небольшую проверку:</p><pre><code>svn checkout <url\_of\_big\_dir> <target> --depth empty cd <target> svn up <file\_you\_want> </code></pre><p>для более старой версии svn вы можете воспользоваться следующими преимуществами:</p><ul> <li>оформите каталог, используя ревизию в далеком прошлом, когда он был менее полон мусора, который вам не нужен.</li> <li>обновите нужный файл, чтобы создать смешанную ревизию. это работает, даже если файл не существует в проверенной вами ревизии.</li> <li>прибыль!</li> </ul><p>альтернатива (например, если в каталоге слишком много мусора прямо из ревизии, в которой он был создан) - сделать копию url-> url-адреса нужного вам файла в новом месте в хранилище (фактически это рабочая ветвь). файла). проверьте этот каталог и сделайте ваши изменения.</p><p>я не уверен, сможете ли вы затем объединить вашу измененную копию обратно в хранилище без рабочей копии цели - мне это никогда не требовалось. если так, то сделай это.</p><p>если нет, то, к сожалению, вам, возможно, придется найти кого-то другого, у которого действительно есть весь каталог, и заставить его сделать это. или, может быть, к тому времени, когда вы внесете свои изменения, остальная часть закончит загрузку ...</p>

<p>попробуйте <code>svn export</code> вместо <code>svn checkout</code>. это работает для отдельных файлов.</p><p>причиной ограничения является то, что <code>checkout</code> создает рабочую копию, которая содержит метаинформацию о хранилище, ревизии, атрибутах и т.д. эти метаданные хранятся в подкаталогах с именем '.svn'. и отдельные файлы не имеют подкаталогов.</p>

<p>используйте <code>svn cat</code> или <code>svn export</code>.</p><p>для этого вам не нужно извлекать рабочий каталог, но вы не сможете зафиксировать внесенные вами изменения. если вам нужно внести изменения и зафиксировать их, вам нужен рабочий каталог, но вам не нужно извлекать его полностью. извлеките ревизию, в которой каталог был еще/почти пуст, а затем используйте 'svn cat', чтобы извлечь файл из head.</p>

<blockquote> <p>если вы хотите просмотреть readme.txt в своем хранилище, не проверяя его:</p> <p>$ svn cat <a href="http://svn.red-bean.com/repos/test/readme.txt">http://svn.red-bean.com/repos/test/readme.txt  это файл readme. вы должны прочитать это. совет: если ваша рабочая копия устарела (или у вас есть локальные изменения), и вы хотите увидеть ревизию head файла в вашей рабочей копии, svn cat автоматически получит head ревизия, когда вы указываете путь: $ cat foo.c<br> этот файл находится в моей локальной рабочей копии и содержит изменения, которые я внес.</p> <p>$ svn cat foo.c последняя редакция свежая из репозитория! </blockquote> <a href="http://svnbook.red-bean.com/en/1.0/re03.html">источник 

ниже приведено эквивалентное решение tortoisesvn принятого ответа (я написал это во внутреннем документе для моей компании, поскольку мы вновь внедряем svn). я подумал, что было бы полезно поделиться здесь также:извлечение одного файла: subversion не поддерживает извлечение одного файла, а только извлечение структур каталогов. (ссылка: <a href="http://subversion.tigris.org/faq.html#single-file-checkout">http://subversion.tigris.org/faq.html#single-file-checkout ).  это связано с тем, что для каждого каталога, который извлекается как рабочая копия, метаданные, касающиеся изменений/версий файлов, хранятся в виде внутренней скрытой папки (.svn/_svn). это не поддерживается в настоящее время (v1.6) для отдельных файлов. альтернативная рекомендуемая стратегия. вам нужно будет выполнить часть каталога извлечения только один раз, после чего вы можете напрямую перейти и оформить отдельные файлы. сделайте редкую проверку родительской папки и структуры каталогов. разреженная проверка в основном проверяет только структуру папок без заполнения файлов содержимого. таким образом, вы извлекаете только структуры каталогов и не должны извлекать все файлы, как это было важно. ссылка: <a href="http://tortoisesvn.net/docs/release/tortoisesvn_en/tsvn-dug-checkout.html">http://tortoisesvn.net/docs/release/tortoisesvn_en/tsvn-dug-checkout.html <strong> шаг 1 </strong>: перейдите в браузер хранилища<strong> шаг 2 </strong>: щелкните правой кнопкой мыши родительскую папку в репозитории, содержащую все файлы, с которыми вы хотите работать, и выберите "оформить заказ".<strong> шаг 3 </strong>: в новом всплывающем окне убедитесь, что каталог проверки указывает на правильное местоположение на вашем локальном пк. также будет раскрывающееся меню с надписью "глубина проверки". выберите "только этот элемент" или "непосредственные дети, включая папки", в зависимости от ваших требований. второй вариант рекомендуется, так как, если вы хотите работать с вложенной папкой, вы можете напрямую перейти в следующий раз, в противном случае вам придется повторить всю эту процедуру еще раз для вложенной папки.<strong> шаг 4 </strong>. теперь родительские папки должны быть доступны в выбранной вами папке и теперь отслеживаются с помощью svn (скрытой папки ".svn"). "или" _svn "теперь должны присутствовать). теперь в репозитории щелкните правой кнопкой мыши по одному файлу, который вы хотите получить отдельно, и выберите опцию "обновить элемент до ревизии". один файл теперь может быть обработан и возвращен в хранилище.надеюсь, это поможет.

вы можете сделать это в два этапа:  извлечь пустой 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 </code></pre></li> </ol>

<p>обновление на случай, если вам действительно нужно, может быть включено в файл, извлеченный из другой папки.</p><p>начиная с svn 1.6 вы можете сделать <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html">внешний файл</a> , своего рода svn-ссылки. это означает, что у вас может быть другая версионная папка, содержащая один файл. внесение изменений в файл в извлечении из этой папки также возможно.</p><p>это очень просто, извлеките папку, в которую вы хотите включить файл, и просто добавьте свойство в папку</p><pre><code>svn propedit svn:externals . </code></pre><p>с таким содержанием:</p><pre><code>file.txt /repos/path/to/file.txt </code></pre><p>после того, как вы подтвердите это, файл появится в будущих извлечениях папки. в основном это работает, но есть некоторые ограничения, как описано в документации, указанной выше.</p>

<p>я бы просто просмотрел его и экспортировал один файл. если у вас есть доступ http, просто используйте веб-браузер, чтобы найти файл и взять его.</p><p>если вам нужно вернуть его после редактирования, это может быть немного более утомительным, но я уверен, что там может быть функция <code>svn import</code> ...</p>

<p>перейдите в браузер репозитория, щелкните правой кнопкой мыши файл и используйте "сохранить как", хотя я использую tortoisesvn.</p>

<p> <a href="https://stackoverflow.com/questions/122107/checkout-one-file-from-subversion/122291#122291">ответ стива джессопа</a> у меня не сработало. я читаю файлы справки для svn, и если у вас просто есть изображение, вы, вероятно, не хотите проверять его снова, если вы не используете photoshop, поэтому <strong> export </strong> это лучшая команда, чем checkout, так как она не версионная (но это незначительно).</p><p>и <strong> - глубина </strong> arg не должна быть <strong> пустой </strong>, но <strong> файлы </strong>, чтобы получить файлы в ближайшем каталоге. таким образом, вы получите все поля, не только одно, но <strong> пустое </strong> ничего не возвращает <em> </em> из репозиторий.</p><pre><code> svn co --depth files <source> <local dest> </code></pre><p>или же</p><pre><code>svn export --depth files <source> <local dest> </code></pre><p>что касается других ответов, <strong> cat </strong> позволяет вам читать контент, который хорош только для текста, а не изображения всех вещей.</p>

<p>если вы просто хотите файл без информации о ревизии, используйте</p><pre><code>svn export <url> </code></pre>

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

<p>если вы просто хотите экспортировать файл, и вам не нужно будет обновлять его позже, вы можете сделать это без использования команд svn.</p><p>используя <strong>tortoisesvn repository browser</strong>, выберите файл, щелкните правой кнопкой мыши, а затем выберите "<strong>скопировать url в буфер обмена</strong>". вставьте этот url в ваш браузер, и после входа в систему вам будет предложено загрузить файл.</p><p>таким образом, вы также можете выбрать нужную версию и загрузить старую версию файла.</p><p><em> обратите внимание, что это действительно, если ваш сервер svn имеет веб-интерфейс. </em></p>

<p>я хотел извлечь один файл в каталог, который не был частью рабочей копии.</p><p>получим файл по следующему url: <a href="http://subversion.repository.server/repository/module/directory/myfile">http: //subversion.repository.server/repository/module/directory/myfile</a> </p><pre><code>svn co http://subversion.repository.server/repository/module/directory/myfile /**directoryb** </code></pre><p>поэтому я проверил данный каталог, содержащий целевой файл, который я хотел получить, в фиктивный каталог (скажем, etcb для url, заканчивающегося на <code>/etc</code>).</p><p>затем я очистил файл <strong>. svn/records </strong> от всех файлов целевого каталога, которые мне не нужны, чтобы оставить только файл, который я хотел. в этом файле <strong>. svn/records </strong> у вас есть запись для каждого файла с его атрибутами, поэтому оставьте только запись, касающуюся файла, который вы хотите получить и сохранить. ,.</p><p>теперь вам нужно просто скопировать ".svn" в каталог, который будет новой "рабочей копией". тогда вам просто нужно:</p><pre><code>cp .svn /directory cd /directory svn update myfile </code></pre><p>теперь каталог <strong> </strong> находится под контролем версий. не забудьте удалить каталог <strong> directoryb </strong>, который был просто "временной рабочей копией".</p>

<p>сделайте что-то вроде этого:</p><pre><code>mkdir <your directory>/repos/test svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt </code></pre><p>по сути, идея состоит в том, чтобы создать каталог, в который вы хотите получить файл из svn. используйте команду <code>svn cat</code> и перенаправьте вывод в файл с тем же именем. по умолчанию кошка будет сбрасывать информацию на stdio.</p>

<p>используя метод разреженного извлечения, вы можете проверить конкретный файл, который уже извлечен или существует ... с помощью простого трюка:</p><p>после извлечения верхнего уровня вашего хранилища с помощью опции "только этот элемент" в windows explorer вы должны сначала щелкнуть правой кнопкой мыши файл, который необходимо обновить; выберите repo browser в контекстном меню; найдите этот файл снова в браузере хранилища и щелкните правой кнопкой мыши. теперь вы должны увидеть "обновить элемент до ревизии" в контекстном меню.</p><p>я не уверен, что это недокументированная функция или просто ошибка. мне понадобилось много времени после работы, чтобы наконец найти этот трюк. я использую <a href="http://en.wikipedia.org/wiki/tortoisesvn">tortoisesvn</a> 1.6.2.</p>

<p>эта проблема покрыта:</p><p> <a href="http://subversion.tigris.org/issues/show\_bug.cgi?id=823">http://subversion.tigris.org/issues/show\_bug.cgi?id=82</a> </p><p>прилагается скрипт, который позволяет вам извлекать один файл из svn, вносить изменения и фиксировать изменения обратно в хранилище, но вы не можете запустить "svn" для извлечения остальной части каталога. он был протестирован с svn-1.3, 1.4 и 1.6.</p>

<p>поскольку ни один из других ответов не работал для меня, я сделал это, используя этот хак:</p><pre><code>$ cd /yourfolder svn co https://path-to-folder-which-has-your-files/ --depth files </code></pre><p>это создаст новую локальную папку, в которой будут только файлы с удаленного пути. затем вы можете сделать символическую ссылку на файлы, которые вы хотите иметь здесь.</p>