Vraag Hoe kan ik Git-wijzigingen in de bestandsmodus (chmod) negeren?


Ik heb een project waarin ik de modus van bestanden moet wijzigen chmod naar 777 tijdens de ontwikkeling, maar die in de hoofdrepo niet zou moeten veranderen.

Git gaat verder chmod -R 777 . en markeert alle bestanden als gewijzigd. Is er een manier om Git negeren van moduswijzigingen die zijn aangebracht in bestanden?


1882
2017-10-16 21:43


oorsprong


antwoorden:


Proberen:

git config core.fileMode false

Van 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.

De -c vlag kan worden gebruikt om deze optie in te stellen voor eenmalige opdrachten:

git -c core.fileMode=false diff

En de --global vlag zal ervoor zorgen dat dit het standaard gedrag is voor de ingelogde gebruiker.

git config --global core.fileMode false

Waarschuwing

core.fileMode is niet de beste methode en moet zorgvuldig worden gebruikt. Deze instelling dekt alleen het uitvoerbare bit van de modus en nooit de lees / schrijfbits. In veel gevallen denk je dat je deze instelling nodig hebt omdat je zoiets hebt gedaan chmod -R 777, waardoor al uw bestanden uitvoerbaar zijn. Maar in de meeste projecten de meeste bestanden hebben het niet nodig en zouden om veiligheidsredenen niet uitvoerbaar moeten zijn.

De juiste manier om dit soort situaties op te lossen, is om map- en bestandsmachtigingen afzonderlijk af te handelen, met iets als:

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

Als u dat doet, hoeft u het nooit te gebruiken core.fileMode, behalve in een zeer zeldzame omgeving.


3109
2017-10-16 21:53



werkwijziging ongedaan maken in werkboom:

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

Of 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



Als u deze optie voor al uw repo's wilt instellen, gebruikt u de --global keuze.

git config --global core.filemode false

Als dit niet werkt, gebruik je waarschijnlijk een nieuwere versie van git, dus probeer het --add keuze.

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

Als je het uitvoert zonder de --global optie en je werk map is geen repo, zul je het krijgen

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

115
2018-04-21 12:00



Als

git config --global core.filemode false

werkt niet voor u, doe het handmatig:

cd into yourLovelyProject folder

cd in .git map:

cd .git

bewerk het configuratiebestand:

nano config

verander van waar naar onwaar

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

opslaan, afsluiten, ga naar de bovenste map:

cd ..

start de git opnieuw

git init

je bent klaar!


66
2017-08-06 13:10



Toevoegen aan Greg Hewgill antwoord (van gebruik core.fileMode config variabele):

Je kunt gebruiken --chmod=(-|+)x optie van git update-index (low-level versie van "git add") om execute permissies in de index te veranderen, van waar het opgehaald zou worden als je "git commit" gebruikt (en niet "git commit -a").


48
2017-10-16 22:03



U kunt het globaal configureren:

git config --global core.filemode false

Als het bovenstaande niet voor u werkt, kan de reden hiervoor zijn dat uw lokale configuratie de algemene configuratie overschrijft.

Verwijder uw lokale configuratie om de algemene configuratie van kracht te laten worden:

git config --unset core.filemode

U kunt ook uw lokale configuratie naar de juiste waarde wijzigen:

git config core.filemode false


32
2018-01-21 09:12



Als je hebt gebruikt chmod commando al controleer dan het verschil van bestand, het toont de vorige bestandsmodus en de huidige bestandsmodus, zoals:

nieuwe modus: 755

oude modus: 644

stel de oude modus van alle bestanden in met het onderstaande commando

sudo chmod 644 .

stel nu core.fileMode in op false in het configuratiebestand, hetzij met de opdracht of handmatig.

git config core.fileMode false

vervolgens chmod-opdracht toepassen om de machtigingen van alle bestanden te wijzigen, zoals

sudo chmod 755 .

en stel core.fileMode opnieuw in op true.

git config core.fileMode true

Voor beste praktijken hoeft Core.fileMode niet altijd false te blijven.


15
2017-10-13 07:34



Als u reclamerend bestanden (inclusief submodules) in bestandsconfiguratiebestanden op false wilt instellen: find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


14
2017-07-16 12:23



Door de volgende alias te definiëren (in ~ / .gitconfig) kunt u de opdracht fileMode per git eenvoudig tijdelijk uitschakelen:

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

Wanneer deze alias wordt voorafgegaan door de opdracht git, worden de wijzigingen in de bestandsmodus niet weergegeven met opdrachten die ze anders zouden laten zien. Bijvoorbeeld:

git nfm status

14
2017-07-24 15:01



Eenvoudige oplossing:

Raak dit Eenvoudig te bevelen in projectmap (het zal je originele wijzigingen niet verwijderen) ... het zal alleen verwijder wijzigingen wat was geweest gedaan terwijl je veranderde project map toestemming

compliment is hieronder:

git config core.fileMode false

Waarom dit onnodige bestand wordt aangepast: omdat u de machtigingen voor de projectmap hebt gewijzigd met lof sudo chmod -R 777 ./yourProjectFolder

wanneer ga je wijzigingen controleren wat heb je niet gedaan? je vond het zoals hieronder tijdens het gebruik git diff bestandsnaam

enter image description here


1
2018-03-19 13:13



Dit werkt voor mij:

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

of omgekeerd, afhankelijk van uw besturingssysteem

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

0
2018-04-30 15:06