2012-06-27 10 views
18

Sto usando git per gestire un sito Web su un server.Git sta cambiando le autorizzazioni del mio file quando spingo al server

Ho un repository locale illustrato 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 nuda sul server che utilizza post-receive puntare il repo di fronte apache. Il contenuto delle cartelle di 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 

Questo sta causando il mio codice al server web.

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

server di file di configurazione git

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

Avete controllato l'umask per l'utente utilizzato per la creazione/srv/repo pubblico/myapp? Cosa c'è nella configurazione del git? Qualcosa relativo alla modalità file è cambiato qui? – bcelary

+0

Ho fatto casino con la modalità file e ho funzionato a un certo punto, ora è 'true'. Non sono sicuro di cosa sia "la smascheratura". Ho un utente git che ho installato con gitolite. Ho aggiornato il post. – ThomasReggi

+0

Vedere [questa domanda] (http://stackoverflow.com/questions/1071241/how-does-git-handle-folder-permission). – vergenzt

risposta

19

This thread post offre una spiegazione molto buona:

Questo legato alla progettazione. Mentre la struttura dati git può archiviare tecnicamente i bit della modalità unix nei suoi alberi, è stato rilevato nella cronologia di git che rispettando qualsiasi cosa oltre un semplice bit eseguibile finito per essere più ingombrante per i normali casi d'uso di Git (cioè, la gente che memorizza il codice o altri file condivisi in un repository).

Si potrebbe aggiungere un'opzione di configurazione per rispettare le modalità di file, ma è stato considerato che non è stato valutato come . Risolve solo una parte del problema dei metadati generali , in quanto omette i nomi dei proprietari e dei gruppi o gli ID, come e anche i metadati estesi come gli ACL.

Se i modi sono importanti per voi, le correzioni proposte sono una delle:

  1. utilizzare uno strumento come "metastore" che può essere chiamato da ganci git, e salverà e ripristinare i permessi dei file in un file che è tracciato nel repository . Si noti che quando si utilizza tale strumento esiste una condizione di gara nella protezione dei file (ad esempio, git creerà il file come 644, quindi metastore lo correggerà a 600, nel frattempo, qualcuno potrebbe leggere il file).

  2. A seconda esattamente quello che stai memorizzazione, può essere utile per mantenere repository in un'altra directory, protetta da autorizzazioni, e quindi utilizzare uno strumento separato per distribuire i file dal repository alla loro posizione finale (ad esempio, un Makefile o altro strumento di installazione ).

+4

Come è sul web e ho bisogno di permessi persistenti. Posso semplicemente aggiungere una linea al mio hook di post-ricezione che cambia tutti i file e le cartelle nella directory di lavoro (non il repository nudo) alle autorizzazioni corrette, cartelle '755' e file' 644'. – ThomasReggi

+2

Se questo si adatta alle tue esigenze, allora si. Il punto chiave è che Git non lo farà per te. Se desideri autorizzazioni specifiche, dovrai farlo manualmente. – vergenzt

+1

@ThomasReggi puoi impostare 'umask 022' nel tuo script .profile per applicare 755 e 644 quando vengono creati nuovi file, come ad esempio estrarre file da Git –

Problemi correlati