Gestire con GIT gli aggiornamenti ad un sito ospitato su ISPConfig

Un piccolo trucco per evitare di avere dei file .git "a spasso" all'interno della webroot.

In ISPConfig (ma non solo), ogni sito ha a disposizione varie cartelle. Una è www/ ed è la webroot (di default tutto ciò che ci viene messo è accessibile via web), mentre un'altra è private/ che, come dice il nome, è privata ed eventualmente accessibile solo agli script server-side (come PHP, che però richiede inoltre che venga inclusa manualmente in open-basedir!).
Git , normalmente, sfutta una cartella .git nascosta all'interno della working directory. Ma se la si mette all'interno della docroot c'è il rischio di esporre informazioni sensibili.
La soluzione "canonica" sarebbe di usare il controllo accessi del server web (.htaccess in Apache) per nasconderla virtualmente, ma... se quei dati non devono essere visibili, perché mai metterli dove di default lo sarebbero per poi nasconderli?
Fortunatamente git permette di specificare il work tree, così disaccoppiandolo dalla posizione della cartella .git:

$ cd private
$ git --git-dir .git --work-tree ../web/ init
Inizializzato un repository Git in /var/www/example.com/private/
$ touch ../www/index.html
$ git status
Sul branch master

Commit iniziale

Untracked files:
  (use "git add ..." to include in what will be committed)

	index.html

nothing added to commit but untracked files present (use "git add" to track)

A questo punto sarà sufficiente ricordarsi di lanciare git dalla cartella private/ come se si fosse in www/ .
Ovviamente è anche possibile lanciare git da www/, ma bisognerà ricordarsi ogni volta di specificare il parametro --git-dir ...

Il "trucco" funziona anche se si clona un repository "regolare", quindi potrà essere utile in tante altre situazioni.

Realizzato con Drupal, un sistema open source per la gestione dei contenuti