git pull dibatalkan dengan nama file kesalahan terlalu panjang


114

Saya menggunakan Windows sebagai OS saya, dan mengerjakan proyek dengan teman yang menggunakan Mac. Dia memeriksa kode ke Github kami.

Saya mencoba untuk menarik semua yang dia lakukan dan dibatalkan dengan kesalahan "nama file terlalu panjang" dari kode pihak ketiga.

Apa yang dapat saya?


Masalah tersebut memiliki dua kasus yang pada dasarnya berbeda, bergantung pada operasi Anda. Jika repositori sudah ada, Anda dapat mengedit konfigurasinya. Tetapi jika tidak? Untuk kloning / checkout dengan membuat direktori baru, hanya jawaban dari @AlexRosenfeld yang akan membantu.
Gangnus

Jawaban:


200

FAQ msysgit di Git tidak dapat membuat direktori file dengan jalur yang panjang sepertinya tidak mutakhir, karena masih tertaut ke tiket msysgit lama # 110 . Namun, menurut tiket selanjutnya # 122 masalah telah diperbaiki di msysgit 1.9, dengan demikian:

  1. Perbarui ke msysgit 1.9 (atau lebih baru)
  2. Luncurkan Git Bash
  3. Buka repositori Git Anda yang 'menderita' masalah jalur panjang
  4. Aktifkan dukungan jalur panjang dengan git config core.longpaths true

Sejauh ini, ini bekerja dengan sangat baik untuk saya.

Perhatikan pemberitahuan penting dalam komentar di tiket # 122

jangan kembali ke sini dan mengeluh bahwa itu merusak Windows Explorer, cmd.exe, bash atau alat apa pun yang Anda gunakan.


Ada beberapa pembaruan, sepertinya ada beberapa skrip tambahan yang perlu Anda jalankan setelah menginstal mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant

18
Apa yang sebenarnya berhasil adalah: git config --global core.longpaths true
Anton Andreev

@AntonAndreev Yup, jika Anda ingin mengaturnya dalam lingkup global, tidak apa-apa. Cakupan lokal per repositori juga valid.
mloskot

Itu tidak berhasil untuk saya tanpa menetapkannya di tingkat global.
Anton Andreev

1
Cara itu tidak akan berfungsi untuk kloning / checkout dengan pembuatan direktori baru. Hanya jawaban dari @AlexRosenfeld yang akan membantu.
Gangnus

69

Solution1 - setel konfigurasi global, dengan menjalankan perintah ini:

git config --system core.longpaths true

Solution2 - atau Anda dapat mengedit langsung file konfigurasi git spesifik Anda seperti di bawah ini:

YourRepoFolder -> .git -> config:

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

Solution3 - saat mengkloning repositori baru: di sini .


1
Cara itu tidak akan berfungsi untuk kloning / checkout dengan pembuatan direktori baru. Hanya jawaban dari @AlexRosenfeld yang akan membantu.
Gangnus

Saya memperbarui jawaban dengan itu, untuk berada di satu tempat, terima kasih.
Daniel Hári

26

Terlambat beberapa tahun, tetapi saya ingin menambahkan bahwa jika Anda perlu melakukan ini dalam satu gerakan (seperti yang saya lakukan), Anda dapat menyetel pengaturan konfigurasi selama perintah klon. Coba ini:

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

1
Salut kawan! Ini bekerja dengan baik saat mengkloning direktori baru dari github.
Jay Killeen

Tidak masalah, senang itu membantu!
xandermonkey

1
Iya! Yang ini, dan untuk kloning - hanya yang ini yang berhasil!
Gangnus

Ini tidak berhasil, kloning saya masih dibatalkan. Saya menggunakan git version 1.8.4.msysgit.0, ada ide?
Solusi-Sederhana

Sepertinya itu sudah usang . Mungkin coba gunakan git-scm? Kesalahan apa yang Anda dapatkan?
xandermonkey

12

Buka file your.gitconfig untuk menambahkan properti longpaths. Sehingga akan terlihat seperti berikut ini:

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

1
Cara itu tidak akan berfungsi untuk kloning / checkout dengan pembuatan direktori baru. Hanya jawaban dari @AlexRosenfeld yang akan membantu.
Gangnus

6

Sebagai seseorang yang mengalami masalah ini terus-menerus dengan repositori java di Windows, solusi terbaik adalah menginstal Cygwin ( https://www.cygwin.com/ ) dan menggunakan instalasi git di semua> devel> git.

Alasan ini adalah solusi terbaik yang saya temui adalah karena Cygwin mengelola nama jalur yang panjang sehingga perintah lain yang disediakan bermanfaat. Contoh: temukan, cp dan rm. Percayalah, masalah sebenarnya dimulai ketika Anda harus menghapus nama jalur yang terlalu panjang di Windows.


4

Usahakan agar file Anda lebih dekat dengan root sistem file. Lebih detail: karena alasan teknis, Git untuk Windows tidak dapat membuat file atau direktori jika jalur absolut lebih dari 260 karakter .


Sepertinya itu hanya bisa mencapai 130 [mungkin windows menggunakan karakter unicode byte ganda di bawahnya] secara default [?]
rogerdpack

5
Lebih banyak orang harus mendorong Microsoft untuk mengubah batasan ini (dan memperbaiki API lama yang mereka rusak). Tidak ada alasan kita harus tetap hidup dengan sisa hari ini ketika nama file dibatasi hingga <8>. <3> karakter. Dengan tidak segera diperbaiki, lubang yang lebih besar sedang digali. Perbaiki arah garis miring saat Anda melakukannya.
cchamberlain

@cchamberlain C: / foo / bar / baz benar-benar valid, meskipun \ foo \ bar \ baz juga valid (ini akan merujuk ke drive logis apa pun tempat direktori kerja saat ini berada) / foo / bar / baz dapat menyebabkan ambiguitas dengan bendera baris perintah.
JAB

@JAB - Memang benar bahwa garis miring kadang-kadang berfungsi tetapi seperti yang Anda tunjukkan, itu tidak dapat diandalkan. cmd.exe akan bereaksi dengan satu cara dan memberi kekuatan pada yang lain. Jeda pelengkapan otomatis. API yang mendasari memahaminya tetapi cmd.exe tidak dalam semua kasus dan penggunaan garis miring terbalik yang lebih aman menyebabkan string terkadang perlu keluar. Sudah ada cukup sampah baris perintah backslash dengan jumlah spasi dan tanda kurung yang ada di jalur Windows umum.
cchamberlain

2
Ini bukanlah solusi. Teknologi harus menjadi hamba manusia, bukan manusia harus menjadi hamba teknologi.
Daniel Hári

4

Di windows jalankan "cmd" sebagai administrator dan jalankan perintah.

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

atau Anda harus chmod untuk folder di mana git diinstal.

atau perbarui file Anda secara manual dengan membuka jalur "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**
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.