Kaip pakeisti „Git“, kad ignoruotų failo režimą (chmod)?

Turiu projektą, kuriame turiu keisti failų režimą nuo chmod iki 777, tačiau tai neturėtų keisti iš esmės repo.

„Git“ pasirenka chmod -R 777 . ir pažymi visus pakeistus failus. Ar galima keisti failų „Git“ ignoravimo režimą?

1818 m
17 окт. Marcus Westin nustatė spalio 17 d 2009-10-17 00:43 '09 - 0:43 2009-10-17 00:43
@ 11 atsakymų

Pabandykite:

 git config core.fileMode false 

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. 

-c vėliava gali būti naudojama nustatyti šį parametrą vienkartinėms komandoms:

 git -c core.fileMode=false diff 

Ir --global vėliava taps numatytu registruoto vartotojo elgesiu.

 git config --global core.fileMode false 

Įspėjimas

core.fileMode nėra gera praktika ir turėtų būti naudojama atsargiai. Šis parametras apima tik vykdomojo režimo bitą ir niekada nenaudoja skaitymo / rašymo bitų. Daugeliu atvejų manote, kad jums reikia šio nustatymo, nes jūs kažką panašaus į chmod -R 777 , todėl visi failai buvo vykdomi. Tačiau daugumoje projektų dauguma failų nereikalingi ir neturėtų būti vykdomi saugumo sumetimais .

Teisingas būdas išspręsti šią situaciją yra elgesys su aplanko ir failo teisėmis atskirai:

2991
17 окт. atsakymas, kurį pateikė Greg Hewgill, spalio 17 d 2009-10-17 00:53 '09, 0:53, 2009-10-17 00:53

Pakeiskite atšaukimo režimą darbo medyje:

 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 
border=0

Arba

 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 
241
18 янв. Atsakymas yra suteiktas yoda 18 sausio. 2010-01-18 05:20 '10, 5:20, 2010-01-18 05:20

Jei norite nustatyti šią parinktį visoms savo saugykloms, naudokite --global .

 git config --global core.filemode false 

Jei tai neveikia, galite naudoti naujesnę „git“ versiją, todėl pabandykite pasirinkti „ --add .

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

Jei jį paleisite be parinkties „-global“, o jūsų darbo katalogas nėra repo, gausite

 error: could not lock config file .git/config: No such file or directory 
115
21 апр. atsakymas duotas adrien 21 Bal 2012-04-21 15:00 '12 15:00 val. 2012-04-21 15:00

Jei

 git config --global core.filemode false 

neveikia jums, atlikite jį rankiniu būdu:

 cd into yourLovelyProject folder 

cd į .git aplanką:

 cd .git 

redaguokite konfigūracijos failą:

 nano config 

keisti tiesa į melagingą

 [core] repositoryformatversion = 0 filemode = true 

->

 [core] repositoryformatversion = 0 filemode = false 

išsaugoti, išeiti, eiti į viršutinį aplanką:

 cd .. 

iš naujo įveskite git

 git init 

viskas yra paruošta!

62
06 авг. Sinan Eldem atsakymas, rugpjūčio 06 d 2013-08-06 16:10 '13, 16:10, 2013-08-06 16:10

Greg Huggill įtraukimas į atsakymą (naudojant „ core.fileMode config“ kintamąjį):

Galite naudoti --chmod=(-|+)x git update-index “ (žemo lygio„ add git “versija), kad pakeistumėte rodyklės vykdomuosius leidimus, iš kurių jis bus iškeltas, jei naudosite„ git saistību “(ir ne "git įsipareigoti -a").

48
17 окт. Jakub Narębski atsakymas spalio 17 d 2009-10-17 01:03 '09, 1:03 2009-10-17 01:03

Jūs galite tinkinti jį visame pasaulyje:

git config --global core.filemode false

Jei pirmiau minėtas veiksmas jums netinka, priežastis gali būti vietinė konfigūracija, viršijanti pasaulinę konfigūraciją.

Ištrinkite vietinę konfigūraciją, kad pasaulinė konfigūracija įsigaliotų:

git config --unset core.filemode

Arba galite pakeisti vietinę konfigūraciją iki teisingos vertės:

git config core.filemode false

31
21 янв. Atsakymą pateikė Tyler Long 21 sausis 2015-01-21 12:12 '15, 12:12 2015-01-21 12:12

Jei norite nustatyti failo kodą į klaidingą konfigūracijos rinkmenose rekursyviai (įskaitant submodulius): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/' find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'

14
16 июля '13 в 15:23 2013-07-16 15:23 atsakymas pateikiamas „ Dryobs “ liepos 16 d., 15:23, 2013-07-16 15:23

Apibrėždami šiuos slapyvardžius (~ / .gitconfig), galite lengvai laikinai išjungti failo kodo komandą, skirtą git:

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

Jei šis slapyvardis yra git komandos prefiksas, failo režimo pakeitimai nebus rodomi komandomis, kurios priešingu atveju parodytų jas. Pavyzdžiui:

 git nfm status 
14
24 июля '15 в 18:01 2015-07-24 18:01 atsakymas pateikiamas Ville'o liepos 24 d., 15 val. 18:01 2015-07-24 18:01

Jei jau naudojote chmod komandą , patikrinkite failo skirtumą. Jis rodo ankstesnį failo režimą ir dabartinį failo režimą, pavyzdžiui:

naujas režimas: 755

senas režimas: 644

nustatyti senąjį režimą visiems failams, naudodami komandą

sudo chmod 644 .

dabar nustatykite core.fileMode į false konfigūracijos faile, naudodami komandą arba rankiniu būdu.

 git config core.fileMode false 

tada naudokite komandą chmod, kad pakeistumėte visų failų leidimus, pvz.,

 sudo chmod 755 . 

ir vėl nustatykite core.fileMode.

 git config core.fileMode true 

Geriausios praktikos atveju ne visada laikykit branduolio.

14
13 окт. Spalio 13 d. Atsakymą pateikia Kishor Vitekar . 2015-10-13 10:34 '15 - 10:34 2015-10-13 10:34

Paprastas sprendimas:

Paspauskite šį paprastą įvertinimą projekto aplanke ( jis neištrins jūsų originalių pakeitimų) ... jis < ištrins pakeitimus , padarytus pakeitus projekto aplanko leidimą

rekomenduojame toliau:

git config core.fileMode false

Kodėl visi šie nereikalingi failo pakeitimai: nes pakeitėte projekto aplanko leidimus su sudo chmod -R 777 patvirtinimu.

kai patikrinate pakeitimus, kurių nepadarėte? Jį radote kaip parodyta žemiau, kai naudojate „ GIT diff“ failo vardą

2019

Turėjau tą pačią problemą, kai leidžiau naudoti visus mano projekte esančius failus. Paaiškėjo, kad galite tai padaryti, grįždami į ankstesnę fiksaciją.

 git reset HEAD --hard 

po to bus atliktas ankstesnio įsipareigojimo atstatymas.

-2
19 дек. Atsakymas pateikiamas RT 19 Dec. 2017-12-19 12:42 '17, 12:42 2017-12-19 12:42

Kiti klausimai apie žymes arba Užduoti klausimą