it-swarm-vi.tech

Tên tệp quá dài trong Git cho Windows

Tôi đang sử dụng Git-1.9.0-preview20140217 cho Windows. Theo tôi biết, bản phát hành này sẽ khắc phục vấn đề với tên tệp quá dài. Nhưng không phải cho tôi.

Chắc chắn là tôi đã làm sai điều gì đó: Tôi đã làm git config core.longpaths truegit add . và sau đó là git commit. Tất cả mọi thứ diễn ra tốt đẹp. Nhưng khi tôi thực hiện git status, tôi nhận được một danh sách các tệp có Filename too long, ví dụ:

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long

Việc tạo lại cho tôi khá đơn giản: chỉ cần tạo một ứng dụng Yeoman với trình tạo Angular ("yo angular") và xóa node_modules khỏi tệp .gitignore. Sau đó lặp lại các lệnh Git đã nói ở trên.

Tôi đang thiếu gì ở đây?

491
Papa Mufflon

Git có giới hạn 4096 ký tự cho tên tệp, ngoại trừ trên Windows khi Git được biên dịch bằng msys. Nó sử dụng phiên bản cũ hơn của API Windows và có giới hạn 260 ký tự cho tên tệp.

Theo như tôi hiểu thì đây là một hạn chế của msys chứ không phải của Git. Bạn có thể đọc chi tiết tại đây: https://github.com/msysgit/git/pull/110

Bạn có thể phá vỡ điều này bằng cách sử dụng ứng dụng khách Git khác trên Windows hoặc đặt core.longpaths thành true như được giải thích trong các câu trả lời khác.

git config --system core.longpaths true

Git được xây dựng dưới dạng kết hợp các tập lệnh và mã được biên dịch. Với sự thay đổi ở trên, một số kịch bản có thể thất bại. Đó là lý do để core.longpath không được bật theo mặc định.

Tài liệu về windows tại https://docs.Microsoft.com/en-us/windows/desktop/fileio/naming-a-file có thêm một số thông tin:

Bắt đầu trong Windows 10, phiên bản 1607, các giới hạn MAX_PATH đã bị xóa khỏi các chức năng thư mục và tệp Win32 phổ biến. Tuy nhiên, bạn phải chọn tham gia vào hành vi mới.

Khóa đăng ký cho phép bạn kích hoạt hoặc vô hiệu hóa hành vi đường dẫn mới. Để kích hoạt hành vi đường dẫn dài, hãy đặt khóa đăng ký tại HKLM\HỆ THỐNG\CurrentControlSet\Control\FileSystem LongPathsEnables (Loại: REG_DWORD)

367
iveqy

Bạn sẽ có thể chạy lệnh

git config --system core.longpaths true

hoặc thêm nó vào một trong các tệp cấu hình Git của bạn theo cách thủ công để bật chức năng này, khi bạn đang sử dụng phiên bản Git được hỗ trợ. Có vẻ như có thể 1.9.0 và sau đó.

966
sparkym3

Điều này có thể giúp:

git config core.longpaths true

Giải thích cơ bản: Câu trả lời này đề nghị không áp dụng cài đặt như vậy cho hệ thống toàn cầu (cho tất cả các dự án để tránh các cấu hình --system hoặc --global). Lệnh này chỉ giải quyết vấn đề bằng cách cụ thể cho dự án hiện tại.

167
Sagiruddin Mondal

Tạo .gitconfig và thêm

[core]
longpaths = true

Bạn có thể tạo tệp trong một vị trí dự án (không chắc chắn) và cả ở vị trí toàn cầu. Trong trường hợp của tôi, vị trí là C:\Users\{name}\.

58
Yash

Giải pháp tốt hơn là kích hoạt tham số longpath từ Git.

git config --system core.longpaths true

Nhưng một cách giải quyết khác là loại bỏ thư mục node_modules khỏi Git:

$ git rm -r --cached node_modules
$ vi .gitignore

Thêm node_modules trong một hàng mới bên trong tệp .gitignore. Sau khi làm điều này, Đẩy các sửa đổi của bạn:

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git Push
33
Janderson Silva

Các bước để làm theo:

  1. Bắt đầu Git Bash as quản trị viên
  2. Chạy lệnh git config --system core.longpaths true

Đọc thêm về git configtại đây .

29
Saikat

Để hoàn toàn chắc chắn rằng nó có hiệu lực ngay sau khi kho được khởi tạo, nhưng trước khi lịch sử từ xa được tìm nạp hoặc bất kỳ tệp nào được kiểm tra, sử dụng theo cách này sẽ an toàn hơn:

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

-c khóa = giá trị

Đặt một biến cấu hình trong kho lưu trữ mới được tạo; điều này có hiệu lực ngay sau khi kho được khởi tạo, nhưng trước khi lịch sử từ xa được tìm nạp hoặc bất kỳ tệp nào được kiểm tra. Khóa có cùng định dạng như mong đợi của git-config 1 (ví dụ: core.eol = true). Nếu nhiều giá trị được cung cấp cho cùng một khóa, mỗi giá trị sẽ được ghi vào tệp cấu hình. Điều này làm cho nó an toàn, ví dụ, để thêm các phần bổ sung tìm nạp vào điều khiển từ xa.

Thêm thông tin

25
gugol

Bạn cũng có thể thử kích hoạt đường dẫn tệp dài.

Nếu bạn chạy Windows 10 Home Edition, bạn có thể thay đổi Sổ đăng ký của mình để bật các đường dẫn dài.

Chuyển đến HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem trong regedit và sau đó đặt LongPathsEnabled thành 1.

Nếu bạn có Windows 10 Pro hoặc Enterprise, bạn cũng có thể sử dụng Chính sách nhóm cục bộ.

Chuyển đến Cấu hình máy tính Mẫu quản trị Hệ thống Hệ thống tập tin trong gpedit.msc, mở Bật đường dẫn dài Win32 và đặt thành Đã bật .

7
Julian Veerkamp

Đang thực hiện git config --system core.longpaths true đã gửi lỗi cho tôi:

"lỗi: không thể khóa tệp cấu hình C:\Chương trình tệp (x86)\Git\mingw32/etc/gitconfig: Quyền bị từ chối"

Đã sửa lỗi với việc thực thi lệnh ở cấp độ toàn cầu:

git config --global core.longpaths true
5
Arpit

Di chuyển kho lưu trữ đến root ổ đĩa của bạn (sửa chữa tạm thời)

Bạn có thể cố gắng tạm thời di chuyển kho lưu trữ cục bộ (toàn bộ thư mục) vào thư mục gốc của ổ đĩa hoặc càng gần gốc càng tốt.

Vì đường dẫn nhỏ hơn ở gốc ổ đĩa, đôi khi nó khắc phục được sự cố.

Trên Windows, tôi sẽ chuyển cái này sang C:\ hoặc root của ổ đĩa khác.

4
Dheeraj Bhaskar

Tôi cũng gặp lỗi này, nhưng trong trường hợp của tôi, nguyên nhân là do sử dụng phiên bản lỗi thời của npm, v1.4.28.

Cập nhật lên npm v3 theo sau

rm -rf node_modules
npm -i

đã làm cho tôi. npm số 2697 có chi tiết về cấu trúc thư mục "tối đa phẳng" có trong npm v3 (phát hành 2015-06-25).

2
James Green

Nếu bạn đang làm việc với phân vùng được mã hóa của mình, hãy xem xét chuyển thư mục sang phân vùng không được mã hóa, ví dụ:/tmp , chạy git pull, rồi di chuyển trở lại.

1
augustowebd