Git sta cambiando le autorizzazioni del mio file quando spingo al server

Sto usando git per gestire un sito Web su un server.

Ho un repository locale mostrato di seguito

[email protected]:myapp$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' total 16 755 [email protected] 18 thomas staff 612 Jun 13 15:35 application 755 [email protected] 11 thomas staff 374 Jun 12 16:25 assets 644 [email protected] 1 thomas staff 6399 Jun 22 11:45 index.php 755 [email protected] 10 thomas staff 340 May 14 15:22 system 

Ho un repository nudo sul server che usa la post-receive per puntare il repository davanti ad apache. Il contenuto delle cartelle public di Apache è inferiore al non-repository.

 [email protected]:/srv/public/myapp# ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' total 20 700 drwx------ 15 root root 4096 Jun 27 11:31 application 700 drwx------ 10 root root 4096 Jun 27 11:31 assets 600 -rw------- 1 root root 6399 Jun 27 11:31 index.php 700 drwx------ 8 root root 4096 Jun 27 11:31 system 

Ciò sta causando il mio codice al server web.

Come posso risolvere questo? Sto usando la gitolite se questo fa differenza.

git server config file

 [core] repositoryformatversion = 0 filemode = true bare = true 

Questo thread post offre un’ottima spiegazione:

Questo è di design. Mentre la struttura dati git può archiviare tecnicamente i bit della modalità unix nei suoi alberi, si è scoperto nella storia di git che rispettare qualcosa oltre un semplice bit eseguibile è diventato più ingombrante per i normali casi d’uso di Git (ad esempio, la memorizzazione di codice o altro file in un repository).

Potremmo aggiungere un’opzione di configurazione per rispettare le modalità di file, ma in genere non è stata considerata utile. Risolve solo una parte del problema generale dei metadati, in quanto omette i nomi e i nomi dei proprietari e dei gruppi, nonché i metadati estesi come gli ACL.

Se le modalità sono importanti per te, le correzioni suggerite sono una delle seguenti:

  1. Usa uno strumento come “metastore” che può essere chiamato da git hooks, e salverà e ripristinerà i permessi dei file in un file che è tracciato nel repository. Si noti che quando si utilizza un tale strumento c’è una condizione di competizione nella protezione dei file (cioè, git creerà il file come 644, e quindi metastore lo correggerà a 600, nel frattempo qualcuno potrebbe leggere il file).

  2. A seconda esattamente di ciò che si sta memorizzando, potrebbe avere senso mantenere il repository in un’altra directory, protetto da autorizzazioni e quindi utilizzare uno strumento separato per distribuire i file dal repository alla loro posizione definitiva (ad esempio, un Makefile o altra installazione strumento).