programing

Windows에서 github/git Checkout이 '오류: 잘못된 경로'를 반환합니다.

abcjava 2023. 8. 9. 20:27
반응형

Windows에서 github/git Checkout이 '오류: 잘못된 경로'를 반환합니다.

github에서 리포지토리를 체크아웃하려고 하면 다음 오류가 발생합니다.

error: invalid path 'configs/perl-modules/DIST.64/perl-HTML-Tree-1:5.03-1.el6.noarch.rpm'

경로에 Windows에서 불법인 :이(가) 포함되어 있는 것이 문제인 것 같습니다.

오류를 조사한 결과 두 가지 가능한 답을 찾았습니다.
리포지토리 파일의 경로를 변경합니다.안타깝게도 팀 리소스이므로 가까운 장래에 수정할 수 없습니다.
sparse-checkout을 사용합니다.다음과 같이 아무런 효과도 없이 시도해 보았습니다.

-ngit@github.com :git clone -n git@github.com :git XXXXX/deploy.git
'배포'로 복제 중...
파일:객체를 중: 되었습니다.개체 열거: 57, 완료.
파일: 객체 개체 수: 100%(57/57), 완료.
: 객체 .물체 압축: 100%(49/49) 완료.
파일: 10 22 8), 팩 86457 (델타 10), 사용 22 (델타 8), 사용 86400
수신 객체: 100% (86457/86457), 1.50 GiB | 4.73 MiB/s 완료
델타 해결: 100%(5979/5979), 완료.
deploy/ cd 포배//
core true git config core.git checkout true
www echo www >> .git/info/info-message-message
checkout git checkout centos6
경로 'DISTperl-HTML-Tree-1 파일: 'configs/perl-modules/DIST.64/perl-HTML-Tree-1:5.03-1.el6.noarch.rpm' 파일입니다.
경로 ' 파일: 'configs/perlbrew/perls/perl-5.24.1/man3/App:Cpan.3' 파일:
.
파일에 (파일 이름)
.

이 작업은 Git for Windows "git version 2.28.0.windows"를 사용하여 수행되었습니다.1." 저는 또한 다음과 같은 다양한 버전의 .git/info/sparse-checkout을 사용하여 두 가지 유형의 줄 끝을 시도했습니다.

/*
!/configs/perl-modules
!/configs/perlbrew/perls/perl-5.24.1/man/man3

체크아웃은 Linux, MacOS 및 WSL에서 잘 작동하지만 문제는 IDE가 작동하지 않는다는 것입니다.Windows에서 스파스 체크아웃이 작동하지 않는 이유는 무엇입니까?다른 가능성은 없습니까?

Git-for-windows 버그 트래커(https://github.com/git-for-windows/git/issues/2803), )에서 문제를 열고 보니 이미 https://github.com/git-for-windows/git/issues/2777 로 문제가 접수되어 있었습니다.그 문제는 제가 다른 깃 플래그를 설정해야 한다는 것을 시사했습니다.

git config core.protectNTFS false

이것(#2777)은 실제로 내 문제에 대한 우회를 포함합니다.저는 git-for-window(매우 응답적인) git-for-window(Git-for-window)가 더 나은 경고 메시지나 파일 경로 매핑 체계와 같은 진정한 해결책을 내놓기를 바랍니다.

이 문제는 창에서 스파스 체크아웃을 사용하는 경우에만 발생합니다.

이름이 ":"인 파일이 포함된 GitHub의 저장소를 Windows에서 체크아웃하려고 할 때 비슷한 문제가 발생한 적이 있습니다.(문제의 원인이 된 파일 이름:"test-img.jpg:Zone.식별자").레포가 다운로드되었지만 파일이 폴더에 표시되지 않았습니다.

나는 그것이 달리는 것을 발견했습니다.git config core.protectNTFS false문제를 해결했지만 실행 전후에 몇 가지 조치를 취해야 했습니다.되었습니다.: 체프로다같습니다과음전는스세▁the다같니습▁so전.

  1. Git 저장소를 로컬로 복제합니다.
  2. 방금 복제된 로컬 Git 저장소 폴더에 'cd'를 입력합니다.
  3. 려달을 합니다.git reset
  4. 려달을 합니다.git config core.protectNTFS false
  5. 려달을 합니다.git checkout(그냥 git checkout, 끝명에는 no *).

그 후, 저는 그 파일들을 볼 수 있었습니다.물론, Git에서 다운로드 받은 몇 가지 추가 사항들은 보통 생략되지만, 제 경우에는 큰 문제가 아니었습니다.

에는 파일 .aux.go▁the▁다▁file▁and▁has없▁doesn니▁windows습▁of수'▁the▁at▁allow▁creation만들그리라는 단어가 있는 파일을 만들 수 없습니다.aux

enter image description here

이 문제에 대한 자세한 내용은 여기를 참조

명령어만 사용하여 문제를 해결하려는 경우:

git clone --sparse -c core.protectNTFS=false -n <repo-URL>
git sparse-checkout add "\!<pattern1>" "\!<pattern2>"
git checkout <branch>

"repo root"이라는 단어를 사용할 수 .*

부록 - git 버전 2.34.1.windows.1 및 기타(?)

유스럽게도감▁regret.git config core.protectNTFS false충분하지 않은 것으로 판명되었습니다. 콜론이 포함된 파일 이름의 내용이 손실됩니다(파일 크기 = 0).

해결책

TL;DR

git diff ec28c8ddd5f8c83d11604bcae69afb46d79b1029 > p.patch
patch -R -f -i p.patch
git add *
git commit 

정교

보니 알고보니니.git config core.protectNTFS false 이상 치명적인 오류가 발생하지 않는 한 효과가 있습니다.

그러나 Git now는 콜론에 잘리고 내용이 없는 파일 이름을 생성합니다.

Writing-Bops:-The-Bebop-Schema-Language.md(~9KB) -->Writing-Bops0KB)

이 문제를 해결하려면 원래 위반 파일의 내용을 다른 방법으로 복사하여 복원해야 합니다.

조건/가정

  • 여기에서는 어떤 이유로 스파스 클론을 사용할 수 없거나 사용하지 않을 것으로 가정합니다.
  • 온 툰디툰▁dgit apply-filter기타 git 이력을 '영구적으로 다시 작성'하는 기술(예: 타사 git repo를 추적하는 경우)
  • 스토리지를 (윈도우용 Git-for-Windows(윈도우용 Git-for-Windows)를 사용합니다.bash너의 껍데기처럼 그리고 가지고 있어요.patch.exe 가능사용 가능)patch --version" 2과 같은."GNU 패치 2.7.6"과 같은 것을 보고해야 합니다.)

(우리의 경우, 우리는 github Wiki 클론을 가지고 장난을 치다가 콜론이 포함된 파일 이름 문제에 부딪혔습니다. 물론, 우리는 추가적인 '희소 클론'이나 WSL 마일을 거치지 않고 문제를 해결하고 싶었습니다.)

실종된 내용은 우리가 한 후에 얻을 수 있는 것으로 밝혀졌습니다.

git config core.protectNTFS false
git checkout <hash>

을 으로써.patch(BTW: 만약 당신이 이 커밋들을 다르게/비교하려고 한다면 TorothyGit은 영원히 교수형에 처해질 것입니다!

이 다음 명령을 사용하여 모든 누락된 변경 사항이 있는 패치 파일을 가져옵니다.콜론 또는 기타 문제가 있는 파일이 여러 개 있는 경우, 누락된 모든 내용이 패치 파일에 나열됩니다. 하나의 패치 파일로 모두 캡처할 수 있습니다!

git diff ec28c8ddd5f8c83d11604bcae69afb46d79b1029 > p.patch
# ^^^^ reference the git hash with the offending original file(s)

이제 패치 파일이 생겼으니 현재 작업 디렉터리에 적용할 수 있습니다. 역으로 적용해야 합니다.-R):

patch -R -f -i p.patch

당신이 면다린버어를 잊는다면,-R패치가 묻습니다(응답).[y]es); 지정하는 경우-R패치는 훨씬 더 야크할 것이다, 그래서.-f(force)는 패치를 닫고 작업을 수행하기 위한 것입니다.

이렇게 하면 패치가 적용되는 하나 이상의 파일이 나열됩니다.

$ patch -R -f -i p.patch
patching file Writing-Bops:-The-Bebop-Schema-Language.md

해당 파일 이름의 콜론에 주목하십시오. 윈도우즈(최소 v2.7.6)의 GNU 패치는 유니코드 동종 그래프를 사용하여 파일 이름의 콜론을 시뮬레이션합니다.자세한 내용은 아래를 참조하십시오.

이제 작업 디렉토리에 콜론화된 파일의 원본 내용이 있고 이러한 파일을 Git 인덱스에 추가하여 평소와 같이 커밋할 수 있습니다.

경고: 이전에 생성된 클리핑된 파일 이름을 정리(삭제)해야 합니다.git checkout진행하기 전에!

참고: 동형 파일 이름이 마음에 들지 않는 경우patch -i누락된 내용에 할당되어 결과를 커밋하기 전에 원하는 내용으로 변경할 수 있습니다.

git add *
git commit 

결과 확인

모든 것을 제대로 수행한 경우, 마지막 커밋은 콜론화된 파일을 내용을 변경하지 않았기 때문에 이름이 바뀐 것으로 나열해야 합니다.git commit따라서 "파일 이름 바꾸기 작업"을 있는 그대로 탐지했어야 합니다.

여분: 대장을 동종 문자로 대체

저는 콜론처럼 보이지만 NTFS 파일 이름에서는 합법적인 것으로 간주되는 유니코드 상형문자를 여러찾았습니다.

약간의 실험 후에, 저는 사용하기로 결정했습니다.제가 만지작거리던 github wiki 페이지를 가능한 한 그대로 유지하고 싶었기 때문입니다.

일반적으로 콜론을 완전히 폐기하거나 하나 이상의 하이픈으로 대체할 수 있지만, 위키 마크다운 페이지의 경우에는 그 결정이 반대로 진행될 수 있습니다.

경로에 [콜론 문자]가 포함되어 있는 것이 문제인 것 같습니다.:이는 Windows에서 불법입니다.

그것이 사실 문제입니다.

은 이쪽]!configs/perlbrew/perls/perl-5.24.1/man/man3

여기서 불만이 제기되는 경로 이름은 다음과 같습니다.

configs/perl-modules/DIST.64/perl-HTML-Tree-1:5.03-1.el6.noarch.rpm

는 하않는지로로 .configs/perlbrew/앞으로 나아갈 길은 더 말할 것도 없습니다.

잘못된 파일 이름을 모두 열거하여 이 문제를 해결할 수 있습니다.하지만 Git은 이것을 위한 더 나은 일반적인 메커니즘이 필요합니다.

나는 언급되지 않은 한 가지 옵션을 발견했습니다.WSL을 사용하여 파일을 체크아웃합니다.

도망친git clonePowerShell/CMD는 WSL/Bash입니다. WSL은 파일 이름이 NTFS에 저장되어 있고 Windows용 VS Code를 사용하여 열어도 파일 이름을 투명하게 수정합니다.Windows(윈도우)에서 파일을 수정하고 Windows(윈도우)에서 변경 사항을 푸시할 수 있었습니다.

GitHub에서: Repo URL로 이동(https://github.com/UserNameHere/RepoNameHere), 에서 "Code" > "Download ZIP"을 클릭한 다음 Windows에서 .zip 파일을 추출하는 데 성공했습니다(잘못된 파일을 건너뛰어야 했습니다).

enter image description here

enter image description here

사하기전에를 사용하기 git clone

다음 명령을 실행합니다.

git config --global core.protectNTFS false

다른 솔루션이 작동하지 않으면 git 버전이 문제일 수 있습니다.버전을 사용했습니다.2.31.1그리고 오류가 표시되었지만, 저는 그것을 시도했습니다.2.15그리고 잘 작동했습니다.▁the입니다.git clonecommand

다른 OS(예: Linux 대 Windows 또는 Mac OS 대 Windows)로 운영되는 경우.파일 경로의 문자를 확인합니다.저의 경우, 저는 Mac에 항목을 저장하고 Windows 컴퓨터를 풀할 때 파일 경로 오류가 발생했습니다.

Windows는 다음과 같이 표시합니다.

파일 이름에는 다음 문자를 포함할 수 없습니다. \ / : * ? " < > |

하지만 저장된 이미지 이름에 "*"가 들어 있었습니다.따라서 팀에서 사용 중인 다른 OS에 유효한 새 이름을 커밋합니다.또는 해결 방법을 찾아 자신을 더욱 좌절시킵니다.

단순한 권리.

제 경우 파일 이름 끝에 공백이 하나 더 있습니다.Windows에서 문제가 발생했습니다.

이 공간을 제거하여 이 문제를 해결할 수 있었습니다.Windows에서 프로젝트를 복제할 수 없었기 때문에 이 변경은 저장소가 있던 위치(우리의 경우 GitHub)에서 직접 수행되었습니다.

나는 당신과 같았고, 당신의 파일 이름이 잘못되었거나 예약되지 않았습니다. 그냥 당신의 파일 이름을 바꾸세요.

유사한 오류가 있는 경우:
개인적으로, 문제는 사용하는 것이었습니다."리눅스에서 파일 이름으로 작업 중입니다.pull윈도우즈 10 시스템에서 사용할 수 있습니다.

의 경우,에, 레는다같음, 이우경과다와 Windows에 잘못된 문자가 있는 파일이 포함되어 .[또는].

git 명령에 대상 경로를 제공한 후 c:/program files/git/src 검색이 중지되었습니다. 실패했습니다. git log --git = email --git-with-stat --full-index --filename -- /src/path to file

이 작업은 git log --dump=email --dump-with-stat --dump --full-index --dump -- ./src/pathtofile로 작동합니다.

파일 이름 지정을 확인하는 것이 좋습니다.Windows에서는 파일 이름 끝에 "?", ":"와 같은 일부 문자를 사용할 수 없습니다.삭제/이름을 잘 변경한 후 다시 시도하십시오.PS: 공백도 허용되지 않습니다.

심볼릭 링크를 지원할 수 없는 경우 "심볼릭 링크 사용" 옵션을 사용하여 Git for Windows를 다시 설치해 보십시오.

자세한 내용은 여기: Windows의 Git 심볼릭 링크

언급URL : https://stackoverflow.com/questions/63727594/github-git-checkout-returns-error-invalid-path-on-windows

반응형