Domanda Come faccio a fare in modo che Git ignori le modifiche alla modalità file (chmod)?


Ho un progetto in cui devo cambiare la modalità dei file con chmod a 777 durante lo sviluppo, ma che non dovrebbe cambiare nel repository principale.

Git riprende chmod -R 777 . e contrassegna tutti i file come modificati. C'è un modo per far sì che Git ignori le modifiche alla modalità che sono state apportate ai file?


1882
2017-10-16 21:43


origine


risposte:


Provare:

git config core.fileMode false

A partire dal git-config (1):

core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

Il -c flag può essere usato per impostare questa opzione per i comandi one-off:

git -c core.fileMode=false diff

E il --global flag lo renderà il comportamento predefinito per l'utente che ha effettuato l'accesso.

git config --global core.fileMode false

avvertimento

core.fileMode non è la migliore pratica e dovrebbe essere usato con attenzione. Questa impostazione copre solo il bit della modalità eseguibile e mai i bit di lettura / scrittura. In molti casi pensi di aver bisogno di questa impostazione perché hai fatto qualcosa del genere chmod -R 777, rendendo tutti i file eseguibili. Ma nella maggior parte dei progetti la maggior parte dei file non ha bisogno e non dovrebbe essere eseguibile per motivi di sicurezza.

Il modo corretto per risolvere questo tipo di situazione è gestire separatamente le autorizzazioni per cartelle e file, con qualcosa come:

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

Se lo fai, non avrai mai bisogno di usare core.fileMode, tranne in un ambiente molto raro.


3107
2017-10-16 21:53



modifica della modalità di annullamento nell'albero di lavoro:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

O in mingw-git

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

246
2018-01-18 02:20



Se si desidera impostare questa opzione per tutti i propri repository, utilizzare --global opzione.

git config --global core.filemode false

Se questo non funziona probabilmente stai usando una versione più recente di git, quindi prova il --add opzione.

git config --add --global core.filemode false

Se lo si esegue senza l'opzione --global e la directory di lavoro non è un repository, si otterrà

error: could not lock config file .git/config: No such file or directory

115
2018-04-21 12:00



Se

git config --global core.filemode false

non funziona per te, fallo manualmente:

cd into yourLovelyProject folder

cd nella cartella .git:

cd .git

modifica il file di configurazione:

nano config

cambia vero con falso

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

salva, esci, vai alla cartella superiore:

cd ..

reiniziare il git

git init

hai fatto!


66
2017-08-06 13:10



Aggiunta a Risposta di Greg Hewgill (di usare core.fileMode variabile di configurazione):

Puoi usare --chmod=(-|+)x opzione di git update-index (versione di basso livello di "git add") per cambiare i permessi di esecuzione nell'indice, da dove verrebbe prelevato se si usa "git commit" (e non "git commit -a").


48
2017-10-16 22:03



Puoi configurarlo a livello globale:

git config --global core.filemode false

Se quanto sopra non funziona per te, la ragione potrebbe essere la tua configurazione locale che sovrascrive la configurazione globale.

Rimuovi la configurazione locale per rendere effettiva la configurazione globale:

git config --unset core.filemode

In alternativa, è possibile modificare la configurazione locale al valore corretto:

git config core.filemode false


32
2018-01-21 09:12



Se hai usato chmod comando già quindi controllare la differenza di file, mostra la modalità file precedente e la modalità file corrente come:

nuova modalità: 755

vecchia modalità: 644

imposta la vecchia modalità di tutti i file usando il comando di sotto

sudo chmod 644 .

ora imposta core.fileMode su false nel file di configurazione usando il comando o manualmente.

git config core.fileMode false

quindi applica il comando chmod per modificare le autorizzazioni di tutti i file come

sudo chmod 755 .

e nuovamente impostato core.fileMode su true.

git config core.fileMode true

Per le best practice non mantenere core.fileMode false sempre.


15
2017-10-13 07:34



Se si desidera impostare filemode su false nei file di configurazione in modo ricorsivo (inclusi i sottomoduli): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


14
2017-07-16 12:23



Definendo il seguente alias (in ~ / .gitconfig) puoi facilmente disabilitare temporaneamente il comando fileMode per git:

nfm = "!f(){ git -c core.fileMode=false $@; };f"

Quando questo alias viene anteposto al comando git, le modifiche alla modalità file non verranno visualizzate con comandi che altrimenti le mostrerebbero. Per esempio:

git nfm status

14
2017-07-24 15:01



Soluzione semplice:

Colpiscilo Semplice elogio nella cartella del progetto (non rimuoverà le tue modifiche originali) ... lo sarà solo rimuovere le modifiche cosa era stato fatto mentre sei cambiato autorizzazione della cartella del progetto

elogiare è di seguito:

git config core.fileMode false

Perché questo file non necessario viene modificato: perché hai cambiato le autorizzazioni della cartella del progetto con encomio sudo chmod -R 777 ./yourProjectFolder

quando controllerai le modifiche, cosa non hai fatto? hai trovato come sotto durante l'utilizzo git diff filename

enter image description here


1
2018-03-19 13:13



Questo funziona per me:

find . -type f -exec chmod a-x {} \;

o invertire, a seconda del sistema operativo

find . -type f -exec chmod a+x {} \;

0
2018-04-30 15:06