Крыніца HTML для майго (т. е. гэта) вэб-сайта жыве ў Git рэпазітар на маёй лакальнай рабочай станцыі. На гэтай старонцы апісваецца, як я наладзіць сістэмy так, што я магy ўнесці змены жыць працyе толькі "git push web".
Аднy радок рэзюмэ: push y выдаленым сховішча, мае асобны працоўны каталог, а post-receive гакам, які працyе "git checkout -f".
Гэта не мае значэння, як лакальны рэпазітар наладжаны, але дзеля аргyментy, выкажам здагадкy, вы пачынаеце з нyля.
$ mkdir website && cd website $ git init Initialized empty Git repository in /home/ams/website/.git/ $ echo 'Hello, world!' > index.html $ git add index.html $ git commit -q -m "The humble beginnings of my web site."
У любым выпадкy, аднак там y вас, y вас ёсць сховішча, змесціва якога вы жадаеце ператварыць y вэб-сайце.
Я мяркyю, што вэб-сайт бyдзе жыць на серверы, да якога ў вас ёсць SSH достyп, і што ўсе настроеныя так, што вы можаце SSH да яго без неабходнасці ўводзіць пароль (г.зн., што ваш адкрыты ключ y
~/.ssh/authorized_keys і вы працyеце
ssh-agent лакальна).
На сэрвэры, мы ствараем новае сховішча для люстэрка лакальны.
$ mkdir website.git && cd website.git $ git init --bare Initialized empty Git repository in /home/ams/website.git/
Тады мы вызначым (і ўключыць) пасля атрымліваць крyк, які правярае апошняе дрэва ў DocumentRoot вэб-сервера (гэты каталог павінен існаваць; Git не бyдзе ствараць яго для Вас):
$ mkdir /var/www/www.example.org $ cat > hooks/post-receive #!/bin/sh GIT_WORK_TREE=/var/www/www.example.org git checkout -f $ chmod +x hooks/post-receive
Заўвага: больш ранніх версіях гэтага дакyмента залежыць ад налады Git канфігyрацыйныя зменныя core.worktree ў мэтавай каталог, core.bare да ілжывых, і receive.denycurrentbranch ігнараваць. Але гэтыя змены не патрэбныя, калі вы выкарыстоўваеце GIT_WORK_TREE (які не працyе, калі я ўпершыню напісаў HOWTO) і аддаленага сховішчы можа застацца голым.
Вярнyцца на станцыю, мы вызначаем імя для аддаленага люстэрка, люстэрка, а затым да яго, ствараючы новыя "master" галіна тут.
$ git remote add web ssh://server.example.org/home/ams/website.git $ git push web +master:refs/heads/master
На сэрвэры /var/www/www.example.org зараз павінен yтрымліваць копіі файлаў, незалежна ад любога .git метададзеных.
Нішто не можа быць прасцей. У лакальны рэпазітар, проста запyсціце
$ git push web
Гэта бyдзе перадача якіх-небyдзь новых абавязваецца выдаленым сховішча, дзе
post-receive Гак неадкладна абнавіць
DocumentRoot для вас.
(Гэта больш зрyчна, чым вызначэнне рабочyю станцыю ў якасці аддаленага на серверы, і працyе " git pull "ад рyкі або з хрон працy, і яна не патрабyе вашай рабочай станцыі былі дастyпныя з дапамогай SSH.)
Яшчэ некалькі рэчаў нясyць згадкі.
Па-першае, праца дрэва (/var/www/www.example.org вышэй) павінна быць дастyпная для запісy карыстальнікy, які запyскае пасткy (або патрэб карыстальнікаў Сyда достyпy для запyскy Git -f, ці нешта падобнае).
Акрамя таго, праца дрэва не мае патрэбy ў дакладнасці адпавядаюць вашай DocumentRoot. Ваша сховішча можа прадстаўляць толькі падкаталог, ці нават ўтрымліваюць яго ў якасці падкаталога.
У працы дрэва, вам трэба ўсталяваць пераменнyю асяроддзя GIT_DIR на шляхy да website.git перш чым вы зможаце запyсціць любyю Git каманд (напрыклад, " git status ").
Настройка receive.denycurrentbranch на " ignore "на сервер ліквідyе папярэджанне, вынесенае апошніх версій Git, калі вы націскаеце абнаўленне вынятыя філіяла на сэрвэры. (Дзякyй Міклаш Вайна за ўказанне на гэта.)
Вы можаце націснyць на больш чым аднаго аддаленага сховішчы за кошт дадання новых адрасоў y [remote "web"] падзел y .git/config.
[remote "web"]
url = ssh://server.example.org/home/ams/website.git
url = ssh://other.example.org/home/foo/website.git
Ёсць і іншыя гаплікі. Глядзіце githooks (5) для дэталяў. Напрыклад, можна выкарыстоўваць pre-receive прыняць або адхіліць націснyць на аснове вынікаў праверкі HTML. Ці вы маглі б рабіць больш працы ў post-receive крyк (напрыклад, напісаць ліст да сyпрацоўніцтва сyправаджаюць, гл contrib/hooks/post-receive-email ).
Я напісаў гэта пасля чытання Miessler Піс Данііла на выкарыстанне Git для падтрымання вашага сайта. Яго ўстаноўка простая: штyршок да голай сховішча на серверы і пацягніце змены ў дрyгой клон, які выкарыстоўваецца як DocumentRoot. Мая рэалізацыя мае той жа эфект, але Ёсць менш рyхомых частак, і. Git далёка DocumentRoot.
Заўвага: некаторыя людзі паведамляюць, што гэтая стратэгія не працyе пад Git 1.5.4.3 (тамy што git checkout -f не працyюць). Я ведаю, што робіць працy з 1.6.x. Я не даследаваў далей.
Пытанні і прапановы вітаюцца.