18

Можно ли «оформить заказ» в месте за пределами хранилища? Я имею в виду клон ветки без каталога «.git».

Например: используйте git для управления сайтом. Вы редактируете некоторые файлы, фиксируете и копируете файлы на веб-сервер через WebDAV. WebDAV-путь - это местоположение вне хранилища, которое не должно содержать «.git».

Это может не быть проблемой для которой был собран git, но возможно ли это?

2 ответа2

18

Да, это, конечно, возможно.

Допустим, у меня есть пустой репозиторий с именем /srv/production.git на целевой системе / сервере.

В системе назначения я могу использовать команду cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Если я нахожусь в не голом хранилище, команда немного отличается. Допустим, у меня есть непустое хранилище в /srv/testing . Чтобы оформить заказ, я бы использовал cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

На самом деле в моей системе я даже автоматизирую это с помощью пост-фиксации в моем репозитории production.git . Поэтому, когда вы нажимаете на production.git последняя версия автоматически загружается в корневой каталог.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

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

5

Если вам нужны только файлы, вы можете использовать git archive. Обычно он записывает в архив, такой как tarballs или ZIP, но вы также можете передать это:

git archive master | tar -x -C /some/path

Здесь, очевидно, master - это ветка, которую вы хотите заархивировать, и /some/path будет содержать только файлы - без .git или .gitignore .


Или вы можете использовать git checkout-index который больше похож на "checkout" файлов:

git checkout-index -f -a --prefix=/some/path/

Здесь опция -a указывает git проверять все файлы. Префикс будет добавлен к выводу. Кто-то также написал обертку вокруг этого для экспорта в git export .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .