Aggiornamento e commit solo delle autorizzazioni di un file usando il controllo versione git


187

Appena trasformato un some.shfile in un eseguibile ( chmod 755 ...), le autorizzazioni sono state aggiornate ma non il contenuto. C'è un modo per eseguire il commit del file in git, in modo che il bit eseguibile venga ripristinato / impostato su clone / checkout / pull ?

Aggiornamento: come posso monitorare a cui sono state inviate le nuove autorizzazioni github?

Risposte:


190

Di default, git aggiornerà i permessi dei file se li cambi. Non cambierà né terrà traccia di altre autorizzazioni.

Se non vedi cambiamenti quando modifichi i permessi di esecuzione, probabilmente hai una configurazione in git che ignora la modalità file.

Guarda nel tuo progetto, nella .gitcartella del configfile e dovresti vedere qualcosa del genere:

[core]
    filemode = false

Puoi cambiarlo truenel tuo editor di testo preferito oppure eseguire:

git config core.filemode true

Quindi, dovresti essere in grado di eseguire il commit dei tuoi file normalmente. Impegnerà solo le modifiche alle autorizzazioni.


grazie! come posso monitorare a cui sono state inviate le modifiche alle autorizzazioni github?
BreakPhreak

2
Puoi vederlo quando visualizzi un file (ad esempio, sul file gitignore di Rails troverai 100644 come permesso del file)
Vincent B.

8
Apportare modifiche alle autorizzazioni su Windows con git (modificando effettivamente le autorizzazioni e il commit dei file): blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster

39
Questa risposta è sbagliata! Git tiene traccia solo se un file è eseguibile o meno. Non tiene traccia delle autorizzazioni di altri file come scrivibili o leggibili. Leggi stackoverflow.com/a/11231682/2311074 per ulteriori informazioni.
Adam,

Per me il webstorm non ha riscontrato il cambiamento, ma in git status, vedo i cambiamenti ..
Townsheriff

193

L'articolo di @fooMonster ha funzionato per me

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Come puoi vedere, il file ha l'autorizzazione 644 (ignorando il 100). Vorremmo cambiarlo in 755:

# git update-index --chmod=+x script.sh

impegnare le modifiche

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
Va notato che in realtà devi usare '-x / + x'. Non è possibile impostare altre autorizzazioni o una maschera di bit.
Devolus,

nota che usare git commit -anon ha fatto nulla per me, tuttavia l'impostazione del messaggio sulla riga di comando ha fatto. Un po '
strano

L'ordine dei comandi dovrebbe essere: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin,

30

Non funziona per me.

La modalità è vera, i permessi dei file sono stati cambiati, ma git dice che non c'è lavoro da fare.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Il problema sembra essere che git riconosce solo alcune modifiche alle autorizzazioni.


51
Corretto: gittiene traccia solo se un file è eseguibile o meno, non l'intero set di autorizzazioni * nix. Quindi dovresti cambiare un file tra eseguibile / non perché pensi di aver cambiato qualcosa che vale la pena impegnare ...
twalberg,

Non sono riuscito a trovare la documentazione chiara: quale trigger post-azione posso usare forse per impostare i permanenti di conseguenza?
Otheus,

2
Bene, c'è un post-checkouthook in git, che coprirebbe alcuni casi, ma non sono sicuro che ciò riguarderebbe tutte le possibili cose che aggiornano i file nel tuo worktree. Potrebbe essere meglio avere solo uno script di shell aggiuntivo nel repository che imposta le cose di conseguenza. In alternativa, ci sono un paio di progetti là fuori che aumentano gitper archiviare metadati, ma non ho mai provato nessuno di loro ...
twalberg,

1
Ho cambiato i permessi dei file in 777 e l'ho fatto git update-index --refresh, ma il diff mostra old mode 100644 new mode 100755. Non ha aggiornato tutte le autorizzazioni
hudac,

vedi @tishma risposta qui stackoverflow.com/questions/14557106/...~~V~~singular~~3rd . Questo è ciò che ha funzionato per me
gary69,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.