2012-10-04 11 views
12

Quando sposto il cambiamento dai miei repository, Git cambia i permessi dei file (in realtà, modifica l'autorizzazione del gruppo write).Impedisci a Git di modificare i permessi su pull

Se sono corretto, Git dovrebbe solo tracciare il bit eseguibile e questo comunque può essere rimosso utilizzando l'impostazione core.filemode su falso.

Tuttavia, sebbene la filemode sia impostata su false (in locale, globale e utente), quando eseguo il pull, l'autorizzazione write cambia costantemente.

Potrei usare un git-hook per ripristinare il chmod corretto, ma questo è un po 'di overhead e preferirei se c'è un modo per chiedere a git di ignorare completamente la modifica della modalità file.

Qualcuno sa come ottenere questo?

risposta

8

Una impostazione che forza aiuto qui config è core.sharedRepository, presentato nel post sul blog "Preserving Group Write on Git Objects in a Collaborative Repository":

La soluzione si è rivelata abbastanza semplice.
Nel file .git/config, ho aggiunto una riga che diceva: "sharedRepository = group", in questo modo:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    sharedRepository = group 

Successivamente, i nuovi file in .git/objects sono stati creati con le autorizzazioni appropriate per il gruppo di scrittura.
(Tuttavia, si noti che i nuovi file appartengono al gruppo principale dell'account utente tramite il quale è stato ricevuto il push. Se gli utenti che collaborano al progetto hanno gruppi primari diversi e se tali utenti non condividono l'appartenenza a tale gruppo insieme di gruppi, si può ancora incorrere in problemi)

assicurarsi del valore della vostra umask:.

Esempio: 0660 farà la lettura repo/scrittura in grado per il proprietario e gruppo, ma inaccessibile agli altri (equivalente al gruppo a meno che umask è ad es. 0022).

+1

Vedere anche https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/QrJII6gTLGM su 'umask' (o http://serverfault.com/questions/26954/how- do-i-share-a-git-repository-with-multiple-users-on-a-machine) – VonC

+2

Hey, grazie! Il mio problema non riguardava .git/objects, ma i file nel repository, ma il tuo commento sul 'umask' era corretto. L'impostazione di 'umask' su' 002' ha permesso l'accesso in gruppo per impostazione predefinita. –

3

La soluzione che uso è quello run the command as the user che dispone delle autorizzazioni che si desidera conservare:

sudo -u user command 

In questo caso, potrebbe essere:

sudo -u www-data git pull 

www-databeing the apache default user on Ubuntu at least.

Ciò mantiene le autorizzazioni di modifica. Lo uso durante l'aggiornamento dei repository git sul mio VPS, mantenendo le autorizzazioni del file impostate all'utente del webserver.

+2

Interessante.Dovrò testarlo. +1 – VonC