Korzystam Git-1.9.0-preview20140217
z systemu Windows. Jak wiem, to wydanie powinno rozwiązać problem ze zbyt długimi nazwami plików. Ale nie dla mnie.
Na pewno robię coś nie tak: zrobiłem git config core.longpaths true
i git add .
czym git commit
. Wszystko poszło dobrze. Ale kiedy teraz robię git status
, otrzymuję listę plików Filename too long
, na przykład:
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
Reprodukcja jest dla mnie bardzo prosta: wystarczy utworzyć aplikację internetową Yeoman za pomocą generatora Angular („yo angular”) i usunąć node_modules
z .gitignore
pliku. Następnie powtórz wyżej wymienione polecenia Git.
Czego tu brakuje?
Odpowiedzi:
Git ma limit 4096 znaków dla nazwy pliku, z wyjątkiem Windows, gdy Git jest kompilowany z msys. Używa starszej wersji interfejsu Windows API i nazwa pliku ma limit 260 znaków.
O ile rozumiem, jest to ograniczenie msys, a nie Git. Możesz przeczytać szczegóły tutaj: https://github.com/msysgit/git/pull/110
Można obejść to za pomocą innego klienta Git na Windows lub zestaw
core.longpaths
dotrue
jak wyjaśniono w innych odpowiedzi.Git jest budowany jako kombinacja skryptów i skompilowanego kodu. Przy powyższej zmianie niektóre skrypty mogą zawieść. To jest powód, dla którego core.longpaths nie są domyślnie włączone.
Dokumentacja systemu Windows pod adresem https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file zawiera więcej informacji:
źródło
core.longpaths
domyślnie nie jest włączone. Zauważ również, że Git dla Windows nie został skompilowany z MSYS. Zamiast tego jest to natywna aplikacja systemu Windows ze zredukowanym środowiskiem MSYS.Powinieneś być w stanie uruchomić polecenie
lub dodaj go ręcznie do jednego ze swoich plików konfiguracyjnych Git, aby włączyć tę funkcję, gdy będziesz na obsługiwanej wersji Git. Wygląda może na 1.9.0 i później.
źródło
To może pomóc:
Podstawowe objaśnienie: Ta odpowiedź sugeruje, aby nie stosować takiego ustawienia do konfiguracji globalnego systemu (do wszystkich projektów, aby unikać konfiguracji
--system
lub--global
oznaczać). To polecenie rozwiązuje problem tylko dlatego, że jest specyficzne dla bieżącego projektu.źródło
--system
co będzie stosować je do wszystkich projektówUtwórz .gitconfig i dodaj
Możesz utworzyć plik w lokalizacji projektu (nie jestem pewien), a także w lokalizacji globalnej. W moim przypadku jest to lokalizacja
C:\Users\{name}\
.źródło
git config --global core.longpaths true
.gitconfig
plik w następującej ścieżceC:\Users\{username}
i po prostu go edytować.Kroki do naśladowania:
Uwaga : jeśli krok 2 nie działa lub występuje błąd, możesz także spróbować uruchomić to polecenie:
Przeczytaj więcej o
git config
tutaj .źródło
Lepszym rozwiązaniem jest włączenie parametru longpath z Git.
Ale obejściem, które działa, jest usunięcie folderu node_modules z Git:
Dodaj moduły_węzła w nowym wierszu w pliku .gitignore. Po wykonaniu tej czynności wciśnij swoje modyfikacje:
źródło
node_modules
:packages.lock
plik jest tutaj, aby upewnić się, że zainstalowana wersjanpm install
będzie zawsze taka sama, dopóki nie dokonasznpm update
Aby mieć całkowitą pewność, że zadziała natychmiast po zainicjowaniu repozytorium, ale przed pobraniem historii zdalnej lub wyewidencjonowaniem jakichkolwiek plików, bezpieczniej jest użyć jej w ten sposób:
Więcej informacji
źródło
Wykonanie
git config --system core.longpaths true
zwróciło mi błąd:Naprawiono podczas wykonywania polecenia na poziomie globalnym:
źródło
Możesz także spróbować włączyć długie ścieżki plików.
Jeśli korzystasz z systemu Windows 10 Home Edition, możesz zmienić rejestr, aby umożliwić długie ścieżki.
Idź do
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
wregedit
, a następnie ustawićLongPathsEnabled
się1
.Jeśli masz system Windows 10 Pro lub Enterprise, możesz także użyć lokalnych zasad grupy.
Idź do Computer Configuration → Szablony administracyjne → Systemu → Filesystem w
gpedit.msc
otwartym Włącz Win32 długie ścieżki i ustaw ją na Enabled .źródło
Powyższe polecenie działało dla mnie. Użycie „--system” dało mi błąd niezablokowanego pliku konfiguracyjnego
źródło
Przenieś repozytorium do katalogu głównego dysku (poprawka tymczasowa)
Możesz spróbować tymczasowo przenieść lokalne repozytorium (cały folder) do katalogu głównego dysku lub jak najbliżej katalogu głównego.
Ponieważ ścieżka jest mniejsza w katalogu głównym dysku, czasami rozwiązuje problemy.
W systemie Windows przeniósłbym to do
C:\
katalogu głównego lub innego dysku.źródło
Miałem również ten błąd, ale w moim przypadku przyczyną było użycie nieaktualnej wersji npm, v1.4.28.
Aktualizacja do npm v3, a następnie
pracował dla mnie. Wydanie 2697 npm zawiera szczegółowe informacje na temat struktury folderów „maksymalnie płaskich” zawartych w npm v3 (wydany 25.6.2015).
źródło
Jeśli pracujesz z zaszyfrowaną partycją, rozważ przeniesienie folderu na niezaszyfrowaną partycję, na przykład a / tmp , uruchomienie
git pull
, a następnie powrót.źródło
W maszynie z systemem Windows
Uruchom wiersz polecenia jako administrator, a następnie uruchom poniżej polecenia
źródło