Можно ли «оформить заказ» в месте за пределами хранилища? Я имею в виду клон ветки без каталога «.git».
Например: используйте git для управления сайтом. Вы редактируете некоторые файлы, фиксируете и копируете файлы на веб-сервер через WebDAV. WebDAV-путь - это расположение вне хранилища, которое не должно содержать «.git».
Это может не быть проблемой для которой был собран git, но возможно ли это?
Допустим, у меня есть пустой репозиторий, названный /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, либо напрямую, либо во временное местоположение, которое затем вы можете написать в сценарии загрузки.
искал в нескольких местах .. только рабочий раствор, тоже чистый!
Картикеян
6
Если вы просто хотите файлы, вы можете использовать git archive. Обычно он записывает в архив, такой как tarballs или ZIP, но вы также можете передать его:
git archive master | tar -x -C /some/path
Здесь, masterочевидно, находится ветка, которую вы хотите заархивировать, и она /some/pathбудет содержать только файлы - нет .gitили .gitignore.
Или вы можете использовать то, git checkout-indexчто больше похоже на «извлечение» файлов:
git checkout-index -f -a --prefix=/some/path/
Здесь -aопция говорит, gitчтобы проверить все файлы. Префикс будет добавлен к выводу. Кто-то также написал обертку вокруг этого, чтобы дать git export.
Я думаю, что вы делаете это сложнее, чем нужно. Просто запустите, GIT_WORK_TREE=/destinationpath git checkout -fкогда ваш текущий каталог находится в верхней части чистого репозитория или подкаталога .git. Вы получите заказ в / destinationpath
Zoredache
Хорошо, я, должно быть, как-то пропустил этот вариант, +1 к тебе.
Slhck
1
Я считаю этот вариант более интуитивным, если честно. И менее подвержен ошибкам.
Если вы просто хотите файлы, вы можете использовать
git archive
. Обычно он записывает в архив, такой как tarballs или ZIP, но вы также можете передать его:Здесь,
master
очевидно, находится ветка, которую вы хотите заархивировать, и она/some/path
будет содержать только файлы - нет.git
или.gitignore
.Или вы можете использовать то,
git checkout-index
что больше похоже на «извлечение» файлов:Здесь
-a
опция говорит,git
чтобы проверить все файлы. Префикс будет добавлен к выводу. Кто-то также написал обертку вокруг этого, чтобы датьgit export
.источник
GIT_WORK_TREE=/destinationpath git checkout -f
когда ваш текущий каталог находится в верхней части чистого репозитория или подкаталога .git. Вы получите заказ в / destinationpath