Разница между выпиской и экспортом в 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 не является вашей рабочей копией.