git pull이 오류 파일 이름으로 중단되었습니다.


114

Windows를 OS로 사용하고 있으며 Mac을 사용하는 친구와 함께 프로젝트를 진행하고 있습니다. 그는 Github에 코드를 체크인했습니다.

나는 그가 한 모든 일을 git pull하려고했지만 타사 코드의 "filename too long"오류로 중단되었습니다.

어떡해?


이 문제는 작업에 따라 크게 두 가지 경우가 있습니다. 저장소가 이미있는 경우 해당 구성을 편집 할 수 있습니다. 하지만 그렇지 않다면? 새 디렉토리 생성과 함께 복제 / 체크 아웃하려면 @AlexRosenfeld의 답변 만 도움이 될 것입니다.
Gangnus

답변:


200

Git 의 msysgit FAQ는 여전히 오래된 msysgit 티켓 # 110에 연결되어 있기 때문에 긴 경로로 파일 디렉토리를 만들 수 없습니다 . 그러나 이후 티켓 # 122에 따르면 문제는 msysgit 1.9에서 수정되었습니다.

  1. msysgit 1.9 (또는 그 이상)로 업데이트
  2. Git Bash 시작
  3. 긴 경로 문제가 '충분한'Git 저장소로 이동하십시오.
  4. 긴 경로 지원 활성화 git config core.longpaths true

지금까지는 매우 잘 작동했습니다.

티켓 # 122에 대한 의견에서 중요한 알림을 유의하십시오.

여기로 돌아와서 Windows 탐색기, cmd.exe, bash 또는 사용중인 도구가 손상된다고 불평하지 마십시오.


당신이 mysysgit를 설치 한 후 실행해야 할 몇 가지 추가 스크립트가 같은 몇 가지 업데이트 모양이 있습니다 github.com/msysgit/git/pull/122#issuecomment-43653756이
애덤 그랜트

18
무엇 실제로 근무하는 것은이었다 자식 설정 --global core.longpaths 사실
안톤 안드리

@AntonAndreev Yup, 전역 범위에서 설정하려면 괜찮습니다. 저장소 당 로컬 범위도 완벽하게 유효합니다.
mloskot

글로벌 수준에서 설정하지 않고는 작동하지 않았습니다.
Anton Andreev

1
이 방법은 새 디렉토리를 만드는 복제 / 체크 아웃에는 작동하지 않습니다. @AlexRosenfeld의 답변 만 도움이 될 것입니다.
Gangnus

69

Solution1- 다음 명령을 실행하여 전역 구성을 설정합니다.

git config --system core.longpaths true

Solution2- 또는 아래와 같이 특정 git 구성 파일을 직접 편집 할 수 있습니다.

YourRepoFolder-> .git-> 구성 :

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

해결책 3-새 저장소를 복제 할 때 : 여기 .


1
이 방법은 새 디렉토리를 만드는 복제 / 체크 아웃에는 작동하지 않습니다. @AlexRosenfeld의 답변 만 도움이 될 것입니다.
Gangnus

한 곳에서 할 수 있도록 답변을 업데이트했습니다. 감사합니다.
Daniel Hári

26

몇 년 늦었지만 한 번에 (내가 한 것처럼)이 작업을 수행해야하는 경우 복제 명령 중에 구성 설정을 지정할 수 있다고 추가하고 싶습니다. 이 시도:

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

1
힘내 친구 야! 이것은 github에서 새 디렉토리를 복제 할 때 훌륭하게 작동했습니다.
Jay Killeen

도움이되었다 니 문제 없습니다!
xandermonkey

1
예! 이것과 복제를 위해-이 하나만 작동합니다!
Gangnus

작동하지 않습니다. 복제가 여전히 중단됩니다. 나는 git version 1.8.4.msysgit.0, 어떤 생각을 사용 하고 있습니까?
Simple-Solution

더 이상 사용되지 않는 것 같습니다 . 아마도 git-scm을 사용해보십시오 . 어떤 오류가 발생합니까?
xandermonkey

12

.gitconfig 파일을 열어 longpaths 속성을 추가합니다. 따라서 다음과 같이 표시됩니다.

[core]
symlinks = false
autocrlf = true
longpaths = true

1
이 방법은 새 디렉토리를 만드는 복제 / 체크 아웃에는 작동하지 않습니다. @AlexRosenfeld의 답변 만 도움이 될 것입니다.
Gangnus

6

Windows의 Java 저장소에서이 문제를 지속적으로 겪은 사람으로서 가장 좋은 해결책은 Cygwin ( https://www.cygwin.com/ )을 설치하고 all> devel> git 아래에서 git 설치를 사용하는 것입니다.

이것이 내가 찾은 최고의 솔루션 인 이유는 Cygwin이 긴 경로 이름을 관리하므로 다른 제공된 명령이 도움이되기 때문입니다. 예 : find, cp 및 rm. 저를 믿으십시오. 실제 문제는 Windows에서 너무 긴 경로 이름을 삭제해야 할 때 시작됩니다.


4

파일을 파일 시스템 루트에 더 가깝게 유지하십시오. 자세한 내용 : 기술적 인 이유로 Windows 용 Git은 절대 경로가 260자를 초과하는 경우 파일 또는 디렉터리를 만들 수 없습니다 .


그것은 단지 (130)에 갈 수있는 것은 기본적으로 [아마 창 아래에 2 바이트 유니 코드 문자를 사용] 것 [?]
rogerdpack

5
더 많은 사람들이 Microsoft에이 제한을 변경하고 그들이 깨뜨리는 레거시 API를 수정하도록해야합니다. 파일 이름이 <8>. <3> 자로 제한되었던이 남은 시대를 살아야 할 이유가 없습니다. 즉시 고정하지 않으면 더 큰 구멍이 파고 있습니다. 당신이 그것에있는 동안 슬래시 방향을 수정하십시오.
cchamberlain

@cchamberlain C : / foo / bar / baz는 완벽하게 유효하지만 \ foo \ bar \ baz도 유효하지만 (현재 작업 디렉토리가있는 논리 드라이브를 참조합니다) / foo / bar / baz는 명령 줄 플래그.
JAB 2015 년

@JAB-슬래시가 때때로 작동하는 것은 사실이지만 지적했듯이 신뢰할 수 없습니다. cmd.exe는 한 방향으로 반응하고 다른 방법으로 powershell합니다. 자동 완성 중단. 기본 API는이를 이해하지만 cmd.exe는 모든 경우에 해당되지 않으며 백 슬래시를보다 안전하게 사용하면 문자열에 이스케이프가 필요한 경우가 있습니다. 공통 Windows 경로에 존재하는 공백과 괄호의 수가 이미 충분한 명령 줄 백 슬래시 가비지가 있습니다.
cchamberlain 2015 년

2
그것은 해결책이 아닙니다. 기술은 인간의 종이되어야하며 인간은 기술의 종이되어야합니다.
Daniel Hári 2015

4

Windows에서 "cmd"를 관리자 권한으로 실행하고 명령을 실행합니다.

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

또는 git이 설치된 폴더에 대해 chmod를 사용해야합니다.

또는 manullay "Git \ mingw64 \ etc"경로로 이동하여 파일을 수동으로 업데이트하십시오.

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.