архив git против cp -R
-
22-08-2019 - |
Вопрос
Если у меня есть клон репозитория git в виде кэшированной копии на удаленном сервере для развертывания в стиле capistrano / vlad, лучше ли сделать)
git archive --format=tar origin/master | (cd #{destination} && tar xf -)
или Б)
cp -R cached-copy #{destination} && rm -Rf #{destination}/.git
Чтобы уточнить, репозиторий уже находится на удаленном сервере, и я просто хочу скопировать определенную версию в каталог releases на том же сервере во время развертывания.
Решение
Я бы сказал, на самом деле
rsync -avP /local/repo/* server:/remote/repo
Это работает до тех пор, пока можно пропустить все точечные файлы в репозитории не только .git
.Если вы хотите пропустить Только .git
тогда вам понадобится -f
опция и справочная страница.
Я люблю rsync ( синхронизация rsync ).Отлично работает, и в большинстве случаев вы можете использовать его так же, как вы бы использовали scp!
Другие советы
А)
Вы экономите сетевые издержки на передачу каталога .git, который может быть довольно большим, в зависимости от того, сколько истории и объектов отсутствует в текущем заголовке.
Если вы когда-либо хотели иметь реальный репозиторий git на удаленном конце, вам лучше перейти к реальному репозиторию и изменить только дельты.
Ни то, ни другое!
Лучший способ сделать это - это:
git fetch
ваш кэш- Клонируйте кэш в ваш текущий каталог (с помощью
--no-checkout
параметры включены) - Проверьте фиксацию, которую вы хотите.
Когда вы создаете локальный клон, Git использует жесткие ссылки.Это означает, что до тех пор, пока вы не измените файл, чего вы не сделаете, вы можете выполнить 1000 развертываний и использовать (практически) только то пространство, которое вам потребуется для одного.Этот способ также намного ускоряет архивирование или rsync.
Также, возможно, кто-то уже написал ваш код за вас.
компания vigetlab's capistrano_rsync_with_remote_cache
Я использую это с Subversion, и у меня это хорошо работает.