Как настроить перехват Git так, чтобы после нажатия на ssh: //peter@foo.com/~/bar.com.git он перешел на ~ / bar.com и сделал git pull? - PullRequest
37 голосов
/ 24 апреля 2011

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

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

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

git push

, и на удаленном компьютере будет выдано значение foo.com/~/bar.com.git (полный путь - ssh://peter@www.foo.com/~/bar.com.git

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

(это связано с Не могу скопировать папку на сервере, а затем отредактировать и нажать 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

Ответы [ 2 ]

56 голосов
/ 24 апреля 2011

Вы можете добавить хук 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 обновляется автоматически.

Смотри также

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

1 голос
/ 24 апреля 2011

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

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