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?

Dave Martin
sumber
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.

mloskot.dll
sumber
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 .

Daniel Hári
sumber
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>
xandermonkey
sumber
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
Pete
sumber
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.

Tristan
sumber
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 .

Michael Ver
sumber
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**
Kumar Abhishek
sumber