Managed ad

Använda git för att driftsätta ändringar av webbplats med submoduler

Av Pontus, 17 oktober, 2015

Till att börja med skapar vi en bare repository på servern som vi kommer att pusha ändringarna till.

$ cd ~
$ mkdir homepage
$ git init --bare homepage

Initialized empty Git repository in /home/user/homepage/

Vi har nu ett tomt projekt som vi kommer att pusha nya versioner till som då automatiskt kommer att läggas upp i katalogen för hemsidan med hjälp post-receive kroken i git. I katalogen finns nu en del kataloger, bland annat hooks i vilken scripten läggs som ska köras. vi skapar nu en fil post-receive i vilken vi anger koden som ska köras. Jag använder joe för att redigera filen, men det går bra med vilken texteditor som helst.

$ cd homepage/hooks
$ joe post-receive

I filen skriver nu följande. 

Uppdatering. den ursprungliga versionen initierade inte submodulerna tydligen, vidare skippade den även eventuella submoduler till submodulerna. För att lösa det så har jag lagt till --init --recursive. 

#!/bin/bash
export GIT_WORK_TREE=/var/www/homepage
git checkout -f master
cd /var/www/homepage
git --git-dir /home/user/homepage/ --work-tree=. submodule update --init --recursive

Filen gör vi nu exekverbar så att den kan köras.

chmod +x post-receive

Nu kommer hemsidan automatiskt att updateras när vi pushar till den här.

På arbetsdatorn lägger vi nu upp den här som en remote repository så att vi kan pusha till den.

$ cd /home/user/myproject/
$ git remote add production ssh://user@host:/home/user/homepage

Nu ska allting uppdateras på servern automatiskt, inklusive submodulerna i git, när vi gör en git push production.

Man kan också uppdatera flera servrar samtidigt genom att lägga till dem under samma remote i config filen för git.

$ cd .git
$ joe config

leta upp upp raden med din remote, i det här fallet heter den production.

[remote "production"]
url = ssh://user@host:/home/user/homepage
Lägg till en rad med adressen till den andra servern, så det ser som nedanstående.
[remote "production"]
url = ssh://user@host:/home/user/homepage

url = ssh://user@host2:/home/user/homepage

Nästa gång du gör en push mot production så kommer nu båda servarna att uppdateras.

 

 

Kategorier

Managed ad