git pull ถูกยกเลิกด้วยชื่อไฟล์ข้อผิดพลาดยาวเกินไป


114

ฉันใช้ Windows เป็นระบบปฏิบัติการและกำลังทำโปรเจ็กต์กับเพื่อนที่ใช้ Mac เขาตรวจสอบรหัสใน Github ของเรา

ฉันพยายามดึงคอมไพล์ทุกอย่างที่เขาทำและมันถูกยกเลิกด้วยข้อผิดพลาด "ชื่อไฟล์ยาวเกินไป" ของรหัสของบุคคลที่สาม

ฉันจะทำอะไรได้บ้าง?


ปัญหานั้นมีสองกรณีหลักที่แตกต่างกันขึ้นอยู่กับการดำเนินการของคุณ หากมีที่เก็บอยู่แล้วคุณสามารถแก้ไขคอนฟิกูเรชันได้ แต่ถ้าไม่? สำหรับการโคลน / ชำระเงินด้วยการสร้างไดเร็กทอรีใหม่คำตอบของ @AlexRosenfeld เท่านั้นที่จะช่วยได้
Gangnus

คำตอบ:


200

คำถามที่พบบ่อยเกี่ยวกับ msysgit Git ไม่สามารถสร้าง filedirectory กับเส้นทางที่ยาวดูเหมือนจะไม่ได้ถึงวันที่ในขณะที่มันยังคงเชื่อมโยงไปยัง msysgit เก่าตั๋ว # อย่างไรก็ตามตามตั๋วในภายหลัง# 122ปัญหาได้รับการแก้ไขใน msysgit 1.9 ดังนั้น:

  1. อัปเดตเป็น msysgit 1.9 (หรือใหม่กว่า)
  2. เปิด Git Bash
  3. ไปที่ที่เก็บ Git ของคุณซึ่ง 'ประสบ' ปัญหาเส้นทางยาว
  4. เปิดใช้งานการสนับสนุนเส้นทางยาวด้วย git config core.longpaths true

จนถึงตอนนี้มันใช้งานได้ดีสำหรับฉัน

โปรดทราบประกาศสำคัญในความคิดเห็นในตั๋ว # 122

อย่ากลับมาที่นี่และบ่นว่า Windows Explorer, cmd.exe, bash หรือเครื่องมือใด ๆ ที่คุณใช้อยู่


มีการอัปเดตเล็กน้อยดูเหมือนว่ามีสคริปต์เพิ่มเติมที่คุณต้องเรียกใช้หลังจากติดตั้ง mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant

18
สิ่งที่ใช้งานได้จริงคือ: git config --global core.longpaths true
Anton Andreev

@AntonAndreev Yup ถ้าคุณต้องการตั้งค่าในขอบเขตทั่วโลกก็โอเค ขอบเขตท้องถิ่นต่อที่เก็บนั้นใช้ได้อย่างสมบูรณ์เช่นกัน
mloskot

มันไม่ได้ผลสำหรับฉันหากไม่มีการตั้งค่าในระดับโลก
Anton Andreev

1
วิธีนี้ใช้ไม่ได้กับการโคลน / ชำระเงินด้วยการสร้างไดเร็กทอรีใหม่ คำตอบของ @AlexRosenfeld เท่านั้นที่จะช่วยได้
Gangnus

69

โซลูชันที่ 1 - ตั้งค่าการกำหนดค่าส่วนกลางโดยเรียกใช้คำสั่งนี้:

git config --system core.longpaths true

โซลูชัน 2 - หรือคุณสามารถแก้ไขไฟล์กำหนดค่า git เฉพาะของคุณได้โดยตรงดังต่อไปนี้:

YourRepoFolder -> .git -> config:

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

Solution3 - เมื่อโคลนพื้นที่เก็บข้อมูลใหม่ที่นี่


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

เปิดไฟล์ your.gitconfig เพื่อเพิ่มคุณสมบัติ longpaths ดังนั้นจะมีลักษณะดังนี้:

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

1
วิธีนี้ใช้ไม่ได้กับการโคลน / ชำระเงินด้วยการสร้างไดเร็กทอรีใหม่ คำตอบของ @AlexRosenfeld เท่านั้นที่จะช่วยได้
Gangnus

6

เนื่องจากมีคนที่ประสบปัญหานี้อยู่ตลอดเวลากับที่เก็บ java บน Windows ทางออกที่ดีที่สุดคือติดตั้ง Cygwin ( https://www.cygwin.com/ ) และใช้การติดตั้ง git ภายใต้> devel> git ทั้งหมด

เหตุผลนี้เป็นทางออกที่ดีที่สุดที่ฉันเจอคือเนื่องจาก Cygwin จัดการชื่อพา ธ แบบยาวดังนั้นคำสั่งอื่น ๆ ที่ให้มาจึงได้รับประโยชน์ เช่น find, cp และ rm เชื่อฉันปัญหาที่แท้จริงเริ่มต้นเมื่อคุณต้องลบชื่อพา ธ ที่ยาวเกินไปใน Windows


4

พยายามทำให้ไฟล์ของคุณอยู่ใกล้กับรูทระบบไฟล์มากขึ้น รายละเอียดเพิ่มเติม: สำหรับเหตุผลทางเทคนิคGit สำหรับ Windows ไม่สามารถสร้างไฟล์หรือไดเรกทอรีเมื่อเส้นทางที่แน่นอนมีความยาวเกิน 260 ตัวอักษร


ดูเหมือนว่าจะไปได้แค่ 130 [บางที windows ใช้อักขระ unicode ไบต์คู่ข้างใต้] ตามค่าเริ่มต้น [?]
rogerdpack

5
ผู้คนจำนวนมากขึ้นควรผลักดันให้ Microsoft เปลี่ยนข้อ จำกัด นี้ (และแก้ไข API เดิมที่พวกเขาทำลาย) ไม่มีเหตุผลใดที่เราควรจะอยู่กับวันที่เหลือนี้เมื่อชื่อไฟล์ถูก จำกัด ไว้ที่ <8>. <3> อักขระ ด้วยการไม่แก้ไขในทันทีจึงมีการขุดหลุมขนาดใหญ่ขึ้น แก้ไขทิศทางสแลชในขณะที่คุณทำอยู่
cchamberlain

@cchamberlain C: / foo / bar / baz นั้นใช้ได้อย่างสมบูรณ์แบบแม้ว่า \ foo \ bar \ baz ก็ใช้ได้เช่นกัน (จะอ้างถึงไดรฟ์แบบลอจิคัลใด ๆ ก็ตามที่ไดเร็กทอรีการทำงานปัจจุบันเปิดอยู่) / foo / bar / baz อาจทำให้เกิดความคลุมเครือด้วย แฟล็กบรรทัดคำสั่ง
JAB

@JAB - มันเป็นเรื่องจริงที่บางครั้งเครื่องหมายทับใช้งานได้ แต่อย่างที่คุณชี้ว่ามันไม่น่าเชื่อถือ cmd.exe จะตอบสนองทางเดียวและอีกทางหนึ่ง การเติมข้อความอัตโนมัติหยุดพัก API พื้นฐานเข้าใจดี แต่ cmd.exe ไม่ได้ใช้ในทุกกรณีและการใช้แบ็กสแลชที่ปลอดภัยกว่าทำให้บางครั้งสตริงจำเป็นต้องมีการหลบหนี มีขยะแบ็กสแลชของบรรทัดคำสั่งเพียงพอพร้อมกับจำนวนช่องว่างและวงเล็บที่มีอยู่ในพา ธ Windows ทั่วไป
cchamberlain

2
มันไม่ใช่วิธีแก้ปัญหา เทคโนโลยีควรเป็นของมนุษย์ไม่ใช่ว่ามนุษย์ควรเป็นผู้รับใช้เทคโนโลยี
Daniel Hári

4

บน windows ให้เรียกใช้ "cmd" ในฐานะผู้ดูแลระบบและดำเนินการคำสั่ง

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

หรือคุณต้อง chmod สำหรับโฟลเดอร์ที่ติดตั้ง git

หรือ 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.