Come faccio a rimuovere i file di dire “vecchio modo 100755 nuovo modo 100.644” dai cambiamenti unstaged in Git?

StackOverflow https://stackoverflow.com/questions/1257592

  •  12-09-2019
  •  | 
  •  

Domanda

Per qualche ragione, quando inizialmente ho fatto un pull dal repository git per un progetto mio, Ho avuto un sacco di file nella mia copia di lavoro che non hanno le modifiche apportate distinguibili a loro, ma tengo mostrando nella mia zona unstaged changes.

Sto usando Git Gui su Windows XP, e quando vado a guardare il file per vedere cosa è cambiato. Tutto quello che vedo è:

old mode 100755  
new mode 100644  

Qualcuno sa cosa significa questo?

Come posso ottenere questi file su mia lista di cambiamenti unstaged? (Molto fastidioso dover passare attraverso 100 di file, solo per scegliere i file Ho recentemente modificato e vuole impegnarsi).

È stato utile?

Soluzione

Che assomiglia autorizzazioni di file UNIX modalità a me (755 = rwxr-xr-x, 644 = rw-r--r--) -. La modalità vecchia incluso il + x (eseguibile) bandiera, la nuova modalità non

risposte di questo numero msysgit suggerisce di core.filemode su false in fine di sbarazzarsi del problema:

git config core.filemode false

Altri suggerimenti

Impostazione core.filemode false funziona, ma assicurarsi che le impostazioni in ~/.gitconfig non vengono sostituite da quelle in .git/config.

che ho incontrato questo problema quando si copia un repo git con i file di lavoro da un vecchio disco rigido un paio di volte. Il problema nasce dal fatto che il proprietario e le autorizzazioni modificate dal vecchio disco / macchina alla nuova. Il lungo e corto di esso è, eseguire i seguenti comandi per raddrizzare le cose ( grazie a questo superuser risposta ):

sudo chmod -R -x . # remove the executable bit from all files

Il primo comando sarà effettivamente risolvere le divergenze che git diff riportato, ma revocherà la vostra capacità di elencare le directory, così ls ./ riesce con ls: .: Permission denied. Per risolvere che:

sudo chmod -R +X . # add the executable bit only for directories

La cattiva notizia è che, se si dispone di tutti i file che si desidera conservare eseguibile, come ad esempio gli script .sh, è necessario ripristinare quelli. Potete farlo con il seguente comando per ogni file:

chmod +x ./build.sh # where build.sh is the file you want to make executable again

Sembra aver modificato alcune autorizzazioni della directory. Ho fatto le seguenti operazioni per ripristinarlo.

$  git diff > backup-diff.txt                ### in case you have some other code changes 

$  git checkout .

Si potrebbe provare git azzerato TESTA --hard per ripristinare il repo allo stato predefinito previsto.

Questo accade quando si tira e tutti i file sono stati eseguibile nel repository remoto. Rendendoli eseguibile nuovo imposterà tutto torna alla normalità.

chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder

Potrebbe essere necessario fare:

chmod -x <file> // Removes execute bit

, invece, per i file che non è stato impostato come eseguibile e che è stato modificato a causa della suddetta operazione. C'è un modo migliore per fare questo, ma questa è solo una soluzione molto veloce e sporco.

ho affrontato lo stesso problema. E questa salvare la mia vita: https://gist.github.com/jtdp/5443498

git diff -p -R --no-color \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply

Di solito accade quando il pronti contro termine viene clonato tra Windows e Linux / Unix.

Basta dire git di ignorare il cambiamento fileMode, qui ci sono diversi modi:

  1. Config SOLO per repo corrente:

    git config core.filemode false
    
  2. Config a livello globale:

    git config --global core.filemode false
    
  3. Aggiungi in ~ / .gitconfig:

    [core]
         filemode = false
    

È sufficiente selezionare uno di loro.

ho avuto appena il un file problematico con le autorizzazioni modificate. Per rotolare indietro individualmente, ho appena cancellato manualmente con rm <file> e poi ha fatto un checkout per tirare una nuova copia.

Per fortuna non avevo ancora messo in scena esso.

Se avessi avrei potuto correre git reset -- <file> prima di eseguire git checkout -- <file>

Ho appena incontrato questo problema quando diffing mio ramo con il maestro. Git ha restituito un errore 'mode' quando mi aspettavo mio ramo di essere identico a padroneggiare. Ho sistemato eliminando il file e poi la fusione maestro di nuovo.

Per prima ho eseguito il diff:

git checkout my-branch
git diff master

Questa restituito:

diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644

Allora ho fatto funzionare il seguente per fissare:

rm bin/script.sh
git merge -X theirs master

Dopo questo, git diff restituito differenze tra il mio-ramo e master.

È possibile utilizzare il seguente comando per modificare la modalità di file indietro. git add --chmod=+x -- filename Poi impegnarsi al ramo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top