Bestandsnaam te lang in Git voor Windows

Ik gebruik Git-1.9.0-preview20140217voor Windows. Zoals ik weet, zou deze release het probleem met te lange bestandsnamen moeten oplossen. Maar niet voor mij.

Ik doe zeker iets verkeerd: ik deed git config core.longpaths trueen git add .en daarna git commit. Alles is goed gegaan. Maar als ik nu een git statusdoe, krijg ik een lijst met bestanden met Filename too long, bijvoorbeeld:

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long

Het is voor mij vrij eenvoudig te reproduceren: maak gewoon een Yeoman-webtoepassing met de Angular generator (“yo angular”) en verwijder node_modulesuit het .gitignorebestand. Herhaal dan de bovengenoemde Git-commando’s.

Wat mis ik hier?


Antwoord 1, autoriteit 100%

Git heeft een limiet van 4096 tekens voor een bestandsnaam, behalve in Windows wanneer Git is gecompileerd met msys. Het gebruikt een oudere versie van de Windows API en er is een limiet van 260 tekens voor een bestandsnaam.

Dus voor zover ik dit begrijp, is het een beperking van msys en niet van Git. U kunt de details hier lezen:
https://github.com/msysgit/git/pull/110

Je kunt dit omzeilen door een andere Git-client op Windows te gebruiken of core.longpathsin te stellen op truezoals uitgelegd in andere antwoorden.

git config --system core.longpaths true

Git is gebouwd als een combinatie van scripts en gecompileerde code. Met de bovenstaande verandering kunnen sommige scripts mislukken. Dat is de reden voor Core.LongPaths die niet standaard kunnen worden ingeschakeld.

De Windows-documentatie op HTTPS: // Documenten. Microsoft.com/en-us/windows/desktop/fileio/naming-a-file heeft nog meer informatie:

Starten in Windows 10, versie 1607, MAX_PATH-beperkingen zijn geweest
Verwijderd van het gewone Win32-bestand en directoryfuncties. Echter, jij
moet opt-in op het nieuwe gedrag.

Een registersleutel stelt u in staat om het nieuwe lange pad in te schakelen of uit te schakelen
gedrag. Om langdurig gedrag in te schakelen, stelt u de registersleutel in bij
HKLM \ System \ CurrentControlSet \ Control \ FileSystem LongpathseNabled
(Type: REG_DWORD)


Antwoord 2, Autoriteit 102%

U moet de opdracht

uitvoeren

git config --system core.longpaths true

of voeg deze handmatig aan een van uw GIT-configuratiebestanden om deze functionaliteit aan te zetten, zodra u een ondersteunde versie van Git hebt. Het ziet eruit als misschien 1.9.0 en na.


Antwoord 3, Autoriteit 24%

Dit kan helpen:

git config core.longpaths true

Basisuitleg: dit antwoord suggereert dat deze instelling niet heeft toegepast op het Global System (aan alle projecten, dus vermijden van --systemof --globalTag) -configuraties. Deze opdracht lost alleen het probleem op door specifiek te zijn voor het huidige project.

bewerken:

Dit is een belangrijk antwoord in verband met de “toestemming geweigerd” -probleem voor degenen die niet zijn verleend om GIT-instellingen wereldwijd te wijzigen.


Antwoord 4, Autoriteit 11%

Stappen om te volgen (Windows):

  1. Voer Git Bashuit als beheerder
  2. Voer het volgende commando uit:
git config --system core.longpaths true

Opmerking: als stap 2 niet werkt of een fout geeft, kunt u ook proberen deze opdracht uit te voeren:

git config --global core.longpaths true

Lees meer over git confighier.


Antwoord 5, autoriteit 9%

Maak .gitconfig en voeg toe

[core]
longpaths = true

U kunt het bestand maken op een projectlocatie (niet zeker) en ook op de globale locatie. In mijn geval is de locatie C:\Users\{name}\.


Antwoord 6, autoriteit 3%

Om er zeker van te zijn dat het onmiddellijk van kracht wordt nadat de repository is geïnitialiseerd, maar voordat de externe geschiedenis wordt opgehaald of bestanden worden uitgecheckt, is het veiliger om het op deze manier te gebruiken:

git clone -c core.longpaths=true <repo-url>

-c key=value

Stel een configuratievariabele in de nieuw gemaakte repository in; dit wordt onmiddellijk van kracht nadat de repository is geïnitialiseerd, maar
voordat de externe geschiedenis wordt opgehaald of bestanden worden uitgecheckt. De sleutel
is in hetzelfde formaat als verwacht door git-config1(bijv.
core.eol=true). Als er meerdere waarden worden gegeven voor dezelfde sleutel, is elke
waarde wordt naar het configuratiebestand geschreven. Dit maakt het veilig, voor
om bijvoorbeeld extra fetch-refspecificaties toe te voegen aan de oorspronkelijke afstandsbediening.

Meer info


Antwoord 7, autoriteit 3%

De betere oplossing is het inschakelen van de longpath-parameter van Git.

git config --system core.longpaths true

Maar een tijdelijke oplossing die werkt, is de map node_modules uit Git verwijderen:

$ git rm -r --cached node_modules
$ vi .gitignore

Voeg node_modules toe in een nieuwe rij in het .gitignore-bestand. Voer daarna uw wijzigingen door:

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push

Antwoord 8, autoriteit 3%

Bij het uitvoeren van git config --system core.longpaths truekreeg ik een foutmelding:

“fout: kon configuratiebestand C:\Program Files niet vergrendelen
(x86)\Git\mingw32/etc/gitconfig: Toestemming geweigerd”

Opgelost met het uitvoeren van de opdracht op globaal niveau:

git config --global core.longpaths true

Antwoord 9

Je zou ook kunnen proberen om lange bestandspaden in te schakelen.

Als u Windows 10 Home Edition gebruikt, kunt u uw register wijzigen om lange paden mogelijk te maken.

Ga naar HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemin regediten stel LongPathsEnabledin op 1.

Als je Windows 10 Pro of Enterprise hebt, kun je ook Local Group Policies gebruiken.

Ga naar ComputerconfiguratieBeheersjablonenSysteemBestandssysteemin gpedit.msc, open Enable Win32 long pathsen zet het op Enabled.


Antwoord 10

git config --global core.longpaths true

Het bovenstaande commando werkte voor mij. Het gebruik van ‘–system’ gaf me een configuratiebestand niet vergrendelde fout


Antwoord 11

TortoiseGit(Windows)

Voor iedereen die TortoiseGit voor Windows gebruikt, deed ik dit:

(1) Klik met de rechtermuisknop op de map die uw project bevat. Selecteer TortoiseGit -> Instellingen.

(2) Klik op het tabblad “Git” op de knop “Lokale .git/config bewerken”.

(3) In het tekstbestand dat verschijnt, onder de sectie [core], voeg je toe:
lange paden = waar

Sla alles op en sluit alles, en probeer je commit opnieuw. Voor mij werkte dit.

Ik hoop dat dit mogelijke systeembrede problemen minimaliseert, aangezien we niet het globale .gitconfig-bestand bewerken, maar alleen dat voor deze specifieke repository.


Antwoord 12

In Windows kun je deze stappen volgen die voor mij hebben gewerkt.

  1. Open je cmd of git bash als beheerder

  1. Geef het volgende commando vanuit cmd of git bash die je hierboven als beheerder hebt uitgevoerd
git config --system core.longpaths true
  1. Hierdoor kunt u toegang krijgen tot lange paden over de hele wereld

  2. En nu kun je de repository klonen zonder problemen met lange paden


Antwoord 13

Verplaats repository naar root van je schijf (tijdelijke oplossing)

Je kunt proberen de lokale repository (de hele map) tijdelijk naar de hoofdmap van je schijf te verplaatsen of zo dicht mogelijk bij de hoofdmap.

Omdat het pad in de root van de schijf kleiner is, worden de problemen soms opgelost.

In Windows zou ik dit naar C:\of de root van een andere schijf verplaatsen.


Antwoord 14

Ik had deze fout ook, maar in mijn geval was de oorzaak het gebruik van een verouderde versie van npm, v1.4.28.

Bijwerken naar npm v3 gevolgd door

rm -rf node_modules
npm -i

werkte voor mij. npm uitgave 2697 bevat details van de “maximaal platte” mapstructuur die is opgenomen in npm v3 (uitgebracht op 25-06-2015).


Antwoord 15

In een Windows-machine

Voer de opdrachtprompt uit als beheerder en voer de onderstaande opdracht uit

git config –system core.longpaths true


Antwoord 16

Als je met je versleutelde partitie werkt, overweeg dan om de map naar een niet-versleutelde partitie te verplaatsen, bijvoorbeeld een /tmp, met git pullen dan terug te gaan.

Other episodes