Разница между выпиской и экспортом в SVN

Какова разница между проверкой SVN и экспортом SVN?

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

PS: Скомпилированный материал - это ядро ​​Linux 2.4, которое используется во встроенном устройстве. Изображение правильно компилируется и загружается, но извлеченный файл не работает. Это вызывает панику ядра во время insmod. Почему это могло произойти вообще?

PPS: Мы попытались проверить и скомпилировать инструмент, чтобы проверить разницу между двумя каталогами, экспортированными и извлеченными из SVN. Оба они одинаковы, за исключением каталога .svn.

Ответ 1

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

svn checkout позволяет использовать управление версиями в каталоге, созданном, например. ваши стандартные команды, такие как svn update и svn commit.

Ответ 2

Как вы сказали, в кассе есть каталоги .svn. Таким образом, это рабочая копия и будет иметь надлежащую информацию для фиксации (если у вас есть разрешение). Если вы делаете экспорт, вы просто берете копию текущего состояния репозитория и не сможете каким-либо образом зафиксировать какие-либо изменения.

Ответ 3

Повторно ли вы выполняете проверку или экспортируете в существующий каталог?

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

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

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

Ответ 4

Любой случай, когда процесс сборки просматривает подкаталоги и включает в себя что-то, чего он не должен делать? Кстати, вы можете сделать юридический чек, а затем удалить .svn и все, что он содержит. Это должно дать вам то же самое, что и экспорт. Попробуйте выполнить компиляцию, которая до и после удаления метаданных была как бы.

Ответ 5

(Чтобы дополнить ответ Джеральда...) Еще одно тонкое различие заключается в том, что, хотя команда:

svn checkout ...repos_location/my_dir .

помещает файлы в my_dir в текущий каталог (с папкой .svn)

в некоторых версиях svn, команда:

svn export ...repos_location/my_dir .

создаст папку с именем my_dir в текущем каталоге, а затем поместит в нее экспортированные файлы.

Ответ 6

Используйте экспорт, если вы хотите загрузить (или дать кому-то) проект. Если вы работаете с проектом, используйте checkout.

Ответ 7

Дополнительные размышления. Вы сказали, что insmod падает. Insmod загружает модули. Модули построены в другой операции компиляции из построения ядра. Ядро и модули должны быть построены из одних и тех же заголовков и т.д. Все ли модули, созданные во время сборки ядра, или они "существуют"?

Другая идея и что-то, о чем я мало знаю, это svn externals, которые (если используются) могут повлиять на то, что проверено на ваш проект. Посмотрите и посмотрите, не отличается ли это при экспорте.

Ответ 8

Очень простая разница. Если вы просто хотите увидеть структуру своего проекта, перейдите на экспорт.

И если вы хотите работать с вашими файлами, вам нужно проверить, как он будет содержать папку .svn, которая содержит метаданные, которые делают рабочую копию, иначе вы получите ошибку при экспорте.

Если вы выполните svn export, а затем отредактируете некоторые файлы и затем выполните фиксацию, вы получите сообщение об ошибке:

../../xxx не является вашей рабочей копией.