Windows 용 Git에서 파일 이름이 너무 깁니다


664

Git-1.9.0-preview20140217Windows에 사용 하고 있습니다. 아시다시피이 릴리스는 파일 이름이 너무 긴 문제를 해결해야합니다. 그러나 나를 위해 아닙니다.

분명히 내가 뭔가 잘못하고 있어요 : 내가 그랬어 git config core.longpaths truegit add .다음 git commit. 모든 것이 잘되었습니다. 그러나 이제을 수행하면 예를 들어 다음 git status과 같은 파일 목록을 얻습니다 Filename too long.

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

나를 위해 재현하는 것은 매우 간단 합니다. Angular 생성기 ( "yo angular")를 사용하여 Yeoman 웹 애플리케이션을 작성 node_modules하고 .gitignore파일 에서 제거 하십시오. 그런 다음 위에서 언급 한 Git 명령을 반복하십시오.

내가 여기서 무엇을 놓치고 있습니까?


그 버전이 긴 파일 이름을 수정해야한다는 것을 어디서 읽습니까?
iveqy

패치에 대한 풀 요청은 다음과 같습니다 : github.com/msysgit/git/pull/122
Papa Mufflon

@PapaMufflon 더 많은 점수를받은 답변으로 수락 된 답변을 변경할 수 있습니까? 그것은 나에게 많은 도움이되었습니다.
v.karbovnichy

@ v.karbovnichy 내 질문을주의 깊게 읽으십시오. 나는 이미 최고 투표 답변에서 명령을 실행했습니다. 그러나 내가 질문을 할 당시, 받아 들인 대답은 정확했습니다. msys는 여전히이 문자 ​​제한이 있습니다. 이제 제한이 사라지고 git config core.longpaths true가 정상적으로 작동합니다.
Papa Mufflon

좋아요, 그때 동의합니다
v.karbovnichy

답변:


704

Git은 msys로 컴파일 될 때 Windows를 제외하고 파일 이름에 대해 4096 자로 제한됩니다. 이전 버전의 Windows API를 사용하며 파일 이름은 260 자로 제한됩니다.

내가 이것을 이해하는 한, 그것은 Git이 아니라 msys의 한계입니다. https://github.com/msysgit/git/pull/110 에서 자세한 내용을 읽을 수 있습니다.

Windows에서 다른 Git 클라이언트를 사용하여이를 우회하거나 다른 답변에서 설명한대로 설정할 core.longpathstrue있습니다.

git config --system core.longpaths true

힘내는 스크립트와 컴파일 된 코드의 조합으로 빌드됩니다. 위의 변경으로 인해 일부 스크립트가 실패 할 수 있습니다. 이것이 core.longpaths가 기본적으로 활성화되어 있지 않은 이유입니다.

https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file 의 Windows 설명서 에는 다음과 같은 추가 정보가 있습니다.

Windows 10 버전 1607부터 일반적인 Win32 파일 및 디렉토리 기능에서 MAX_PATH 제한이 제거되었습니다. 그러나 새 동작을 선택해야합니다.

레지스트리 키를 사용하면 새로운 긴 경로 동작을 활성화하거나 비활성화 할 수 있습니다. 긴 경로 동작을 사용하려면 HKLM \ SYSTEM \ CurrentControlSet \ Control \ FileSystem LongPathsEnabled에서 레지스트리 키를 설정하십시오 (유형 : REG_DWORD).


19
경로에서 260 자로 제한하는 것은 MSYS에만 국한된 것이 아니라 일반적인 Windows API 모방입니다. 유니 코드 경로를 사용하여이 문제를 해결할 수 있지만 다른 단점이 있기 때문에 core.longpaths기본적으로 활성화되어 있지 않습니다. 또한 Windows 용 Git은 MSYS에 대해 컴파일되지 않았습니다. 대신 제거 된 MSYS 환경과 함께 제공되는 기본 Windows 응용 프로그램입니다.
sschuberth

3
@ sschuberth : 긴 경로를 지원하지 않는 프로그램과의 호환성 부족 이외의 단점이 있습니까?
JAB September

3
@JAB 또 다른 단점은 긴 경로는 항상 절대적이어야한다는 것입니다. 상대 경로는 지원되지 않습니다. 자세한 내용은 여기 를 참조 하십시오 .
sschuberth

4
또는 빠른 수정으로 Windows에서 리포지토리를 C : /로 체크 아웃하면 폴더 경로 문자 수가 줄어 듭니다.
Akshay Lokur

5
참고로 지금까지 문제는 여전히 지속됩니다. 우리는 실제 운영 체제에서의 지속적인 개발을 고려하고 싶을 것입니다.
Géza Török

1033

명령을 실행할 수 있어야합니다

git config --system core.longpaths true

또는 지원되는 버전의 Git에 연결되면 Git 구성 파일 중 하나에 수동으로 추가하여이 기능을 켤 수 있습니다. 아마도 1.9.0 이후처럼 보입니다.


13
이 구성 옵션은 허용 된 답변에 언급 된 것처럼 msys에서도 문제를 해결했습니다. (특히 버전 1.9.4.msysgit.2).
Alex Osborn

5
"SourceTree가 내장 된 시스템이 아닌 시스템의 Git을 사용하고 있는지 확인하지 않는 한"Sourcetree는 약간 이상하게 작동합니다. - 그 조언에 대해 Matej Drolc 에게 감사드립니다
bstoney

38
다음 은 기본적으로 활성화되지 않은 배경 정보와 기술적 인 세부 정보입니다.
sschuberth

12
위의 명령을 실행 한 후 "구성 파일 C : \ Program Files \ Git \ mingw64 / etc / gitconfig를 잠글 수 없습니다"를 얻습니다. 그러나 @ Yash 답변이 저에게
효과적

10
관리자로 git bash를 실행하는 @divideByZero는 해당 오류를 방지합니다.
Niek

204

도움이 될 수 있습니다.

git config core.longpaths true

기본 설명 :이 답변은 이러한 설정을 전역 시스템 (모든 프로젝트에 피 --system하거나 --global태그 지정) 구성에 적용하지 않는 것이 좋습니다 . 이 명령은 현재 프로젝트에 따라 문제를 해결합니다.


13
여기에서 사람들은이 설정으로 인해 예측할 수없는 동작이 발생할 수 있으므로 위의 명령 --system을 모든 프로젝트에 적용하는 것이 아니라 추가해야하는 프로젝트에서 로컬 설정으로 사용하는 것이 좋습니다.
Grant Humphries

4
저것은, 다른 고도로 찬성 된 답변의 카피 파 스타일뿐입니다. 최소한 --system 옵션을 제거하는 것을 선호하는 이유를 설명 할 수도 있습니다.
Félix Gagnon-Grenier

78

.gitconfig를 생성하고 추가하십시오

[core]
longpaths = true

프로젝트 위치 (확실하지 않음)와 전역 위치에서 파일을 작성할 수 있습니다. 제 경우에는 위치가 C:\Users\{name}\입니다.


10
다음 명령 git config --global core.longpaths true
Curly

git config --global core.longpaths true는 저에게 도움이되었습니다
Rama Krshna Ila

1
Visual Studio를 사용하면 위의 git bash 솔루션이 작동하지 않지만 프로젝트에 대한 .git / config 파일을 찾고 위와 같이 편집했습니다. 고마워요
앤드류 페이트

이것은 나를 위해 일했다, 나는 그 파일을 찾아 수동으로 수정했다
Patlatus

1
위에서 언급하고 확인한 답변은 정확하지만 파일에 부여 된 권한이 있으면 해당 명령으로 파일을 업데이트하지 못할 수 있습니다. 이 방법은 수동 방법이므로 정말 쉽습니다. .gitconfig다음 경로에서 파일을 쉽게 찾아서 C:\Users\{username}편집 할 수 있습니다.
Kavindu Narathota

53

따라야 할 단계 :

  1. 관리자 권한 으로 Git Bash 실행
  2. 다음 명령을 실행하십시오.
git config --system core.longpaths true

참고 : 2 단계가 작동하지 않거나 오류가 발생하면이 명령을 실행할 수도 있습니다.

git config --global core.longpaths true

자세한 내용은 git config 여기를 참조 하십시오 .


35

더 나은 솔루션은 Git의 longpath 매개 변수를 활성화하는 것입니다.

git config --system core.longpaths true

그러나 해결 방법은 Git에서 node_modules 폴더를 제거하는 것입니다.

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

.gitignore 파일의 새 행에 node_modules를 추가하십시오. 이 작업을 수행 한 후 수정 사항을 푸시하십시오.

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

3
node_modules 폴더를 git에 체크 인해 야하는 좋은 이유가 있습니다. npm에서 1 년 동안 모듈이 사라진 후 소프트웨어가 동일하게 작동하려면.
cfstras

@cfstras 일부 라이브러리에 취약점이 있고 주기적으로 업데이트하지 않으면 보안 문제가 발생합니다.
Janderson Silva

1
물론 종속성을 업그레이드해야합니다. 그러나 당신이 원할 때 , 그리고 무언가가 망가 졌다면, 당신은 자식으로 백업을 원할 것입니다.
cfstras

사실이다. 답변을 수정하겠습니다. 의견을 보내 주셔서 감사합니다.
Janderson Silva

1
커밋 할 필요가 없습니다 node_modules. packages.lock파일은 npm install사용자가 만들 때까지 설치된 버전 이 항상 동일하도록하기위한 것입니다.npm update
Pierre-Olivier Vares

32

리포지토리가 초기화 된 직후에 적용되지만 원격 기록을 가져 오거나 파일을 체크 아웃하기 전에 다음과 같이 사용하는 것이 더 안전합니다.

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

-c 키 = 값

새로 작성된 저장소에서 구성 변수를 설정하십시오. 이는 리포지토리가 초기화 된 직후, 원격 기록을 가져 오거나 파일을 체크 아웃하기 전에 적용됩니다. 키는 git-config 1에서 예상 한 것과 같은 형식입니다 (예 : core.eol = true). 동일한 키에 여러 값이 제공되면 각 값이 구성 파일에 기록됩니다. 예를 들어, 원거리 리모트에 추가 페치 참조 스펙을 추가하는 것이 안전합니다.

더 많은 정보


24

실행 git config --system core.longpaths true하면 나에게 오류가 발생했습니다.

"오류 : 구성 파일 C : \ Program Files (x86) \ Git \ mingw32 / etc / gitconfig를 잠글 수 없습니다 : 권한이 거부되었습니다"

글로벌 수준에서 명령을 실행하면 수정되었습니다.

git config --global core.longpaths true

전역 설정은 현재 사용자에게만 영향을주는 반면 시스템 설정은 컴퓨터의 모든 사용자에게 영향을줍니다. 워크 스테이션 인 경우 한 명의 사용자 만 사용할 수있는 것과 동일합니다.
타월

4
관리자 권한으로 실행 한 명령 줄 응용 프로그램 인 경우 첫 번째 명령이 작동합니다!
Sachith Dickwella 5

12

긴 파일 경로를 사용하려고 할 수도 있습니다.

Windows 10 Home Edition을 실행하면 긴 경로를 사용하도록 레지스트리를 변경할 수 있습니다.

이동 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemregedit설정 한 다음 LongPathsEnabled1 .

Windows 10 Pro 또는 Enterprise가있는 경우 로컬 그룹 정책을 사용할 수도 있습니다.

이동 컴퓨터 구성관리 템플릿시스템파일 시스템 에서 gpedit.msc열려 는 Win32에게 긴 패스를 사용 하고로 설정 가능 .


5
나는 이것이 git config와 함께 수행되어야한다고 생각하며 여기에 언급 된 이유로 Windows 탐색기와 작동하지 않는다는 점에 주목할 가치가 있습니다 .
Neo

11
git config --global core.longpaths true

위의 명령이 나를 위해 일했습니다. '--system'을 사용하면 구성 파일이 잠기지 않습니다.


2
Github Desktop 사용자의 경우 Github Desktop이 자체 Git 구성을 사용하기 때문에 작동하는 유일한 사용자입니다.
Csaba

4

저장소를 드라이브의 루트로 이동 (임시 수정)

로컬 리포지토리 (전체 폴더)를 드라이브의 루트 또는 가능한 한 루트에 가깝게 이동하려고 할 수 있습니다.

경로는 드라이브 루트에서 더 작기 때문에 때때로 문제를 해결합니다.

Windows에서는 이것을 C:\다른 드라이브의 루트 로 옮길 것 입니다.


2
이것이 내 문제를 해결 한 유일한 것입니다. 경로에 폴더가 너무 많았습니다.
J Brune

2

이 오류도 있었지만 제 경우에는 오래된 버전의 npm v1.4.28을 사용하고있었습니다.

npm v3로 업데이트 한 후

rm -rf node_modules
npm -i

나를 위해 일했다. npm 문제 2697에는 npm v3 (2015-06-25 릴리스)에 포함 된 "최대 플랫"폴더 구조에 대한 세부 정보가 있습니다.


1

암호화 된 파티션으로 작업하는 경우 폴더를 암호화되지 않은 파티션 (예 : / tmp , running git pull)으로 이동 한 다음 뒤로 이동하십시오.


0

윈도우 머신에서

관리자 권한으로 명령 프롬프트를 실행 한 다음 아래 명령을 실행하십시오.

git config --system core.longpaths true

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.