Оформить заказ Git-файлов за пределами хранилища

12366
user240826

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

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

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

18

2 ответа на вопрос

17
Zoredache

Yes, this is certainly possible.

Lets say I have a bare repository named /srv/production.git on the destination system/server.

On the destination system I can use the command cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

If I am in a non-bare repository the command is slightly different. Lets say I have a non-bare respository at /srv/testing. To checkout that I would use cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

In fact on my system I even automate this in a post-commit hook in my production.git repository. So when you push to production.git the latest version is automatically check out to the web root.

#!/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. 

If your only access to the remote system is webdav, it certainly should be possible to write a post-commit hook that will checkout to the webdav host, either directly or to a temporary location, which you can then script an upload.

5
slhck

If you just want the files, you can use git archive. Usually it writes to an archive like tarballs or ZIP, but you can pipe it as well:

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

Here, master obviously is the branch you want to archive, and /some/path will contain just the files – no .git or .gitignore.


Or you can use git checkout-index which more closely resembles a "checkout" of files:

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

Here, the -a option tells git to check out all files. The prefix will be prepended to the output. Somebody also wrote a wrapper around this to give a git export.

Я думаю, что вы делаете это сложнее, чем нужно. Просто запустите `GIT_WORK_TREE = / destinationpath git checkout -f`, когда ваш текущий каталог находится в верхней части чистого репозитория или подкаталога .git. Вы получите заказ в / destinationpath Zoredache 11 лет назад 2
Хорошо, я, должно быть, как-то пропустил этот вариант, +1 к тебе. slhck 11 лет назад 0
Я считаю этот вариант более интуитивным, если честно. И менее подвержен ошибкам. Minix 6 лет назад 0

Похожие вопросы