Вопрос

Если у меня есть клон репозитория 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, и у меня это хорошо работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top