Подтвердить что ты не робот

Как настроить крюк Git, чтобы после нажатия на ssh://[email protected]/~/bar.com.git он перейдет на ~/bar.com и сделает Git pull?

Мне было предложено настроить на удаленном сервере

foo.com/~/bar.com       # live webpage content
foo.com/~/bar.com.git   # a bare repo

поэтому, с моей локальной машины, я могу сделать

git push

и он будет нажимать на foo.com/~/bar.com.git на удаленном компьютере (полный путь ssh://[email protected]/~/bar.com.git

Как добавить hook, так что после нажатия удаленный сервер будет cd ~/bar.com и сделает git pull, чтобы все содержимое обновлялось (так же, как и на локальном компьютере)? (нет необходимости запускать git update как для Mercurial?)

(это связано с Не удается git клонировать папку на сервере, а затем редактировать и git нажимать? прямо сейчас я могу ssh до foo.com и cd ~/bar.com и подождите там и выполните git pull, когда после git push с локального компьютера, но было бы неплохо сделать это автоматически)

Обновить. Пожалуйста, напишите только ответ, если вы знаете конкретные детали и как это сделать. Если вы google и опубликуете первый или второй результат Google здесь, это не поможет.

Обновление 2. Я пошел в ~/bar.com.git/hooks и добавил новый файл post-receive с контентом:

#!/bin/bash

cd ~/bar.com
git pull ../bar.com.git master

а также chmod 755 post-receive, и если я отредактирую файл на локальном компьютере, а затем git com -m "ok" и git push, он не внесет изменения в папку удаленного компьютера ~/bar.com

4b9b3361

Ответ 1

Вы можете добавить post-receive к репо ~/bar.com.git для этого. Для этого добавьте в каталог ~/bar.com.git/hooks/ исполняемый файл post-receive с содержимым:

#!/bin/sh

unset $(git rev-parse --local-env-vars)
cd ~/bar.com
git pull

Убедитесь, что файл post-receive имеет исполняемые биты (например, 755).

Теперь, когда что-то помещается в репозиторий ~/bar.com.git, репозиторий ~/bar.com обновляется автоматически.

См. также

чтобы понять, почему необходимо отменить некоторые переменные среды.

Ответ 2

Я использую следующий post-update script (убедитесь, что вы установите для него исполняемый бит):

#!/bin/sh
rm -rf ~/public_html/xxx
git-archive --format=tar --prefix=xxx master | tar x -C ~/public_html

Он делает это, но есть короткое окно, когда сайт недоступен. Выполнение git pull непосредственно в вашем ~/bar.com приведет к открытию каталога git .git, поэтому убедитесь, что вы заблокировали его на своем http-сервере или сохраните .git где-то выше в иерархии каталогов, т.е. что-то вроде:

~
 \
  - repo
    \
     - .git
     - bar.com
       \
        - your content