উইন্ডোজের জন্য গিটের মধ্যে ফাইলের নাম খুব দীর্ঘ


663

আমি Git-1.9.0-preview20140217উইন্ডোজ জন্য ব্যবহার করছি । আমি জানি, এই রিলিজটি খুব দীর্ঘ ফাইলের নাম সহ সমস্যাটি সমাধান করবে। কিন্তু আমার জন্য না.

নিশ্চয় আমি কিছু ভুল করছি: আমি করেনি git config core.longpaths trueএবং git add .তারপর git commit। সবকিছু ঠিকঠাক হয়ে গেল। তবে এখন যখন আমি একটি করি git status, আমি ফাইলগুলির একটি তালিকা পাই Filename too long, উদাহরণস্বরূপ:

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

আমার পক্ষে এটি পুনরুত্পাদন করা বেশ সহজ: কেবলমাত্র কৌণিক জেনারেটর ("ইও কৌণিক") দিয়ে ইয়েমেন ওয়েব অ্যাপ্লিকেশন তৈরি করুন node_modulesএবং .gitignoreফাইলটি থেকে সরান । তারপরে উল্লিখিত গিট আদেশগুলি পুনরাবৃত্তি করুন।

আমি এখানে কি মিস করছি?


আপনি কোথায় পড়েন যে সংস্করণটির দীর্ঘ ফাইলের নামগুলি ঠিক করা উচিত?
iveqy


@ প্যাপামফলন আপনি কি আরও বেশি স্কোর দিয়ে উত্তর গ্রহণের উত্তরটি পরিবর্তন করতে পারবেন? এটি কেবল আমাকে অনেক সাহায্য করেছে।
v.karbovnichy

@ v.karbovnichy দয়া করে আমার প্রশ্নটি মনোযোগ সহকারে পড়ুন। আমি ইতিমধ্যে শীর্ষ ভোটের উত্তরে কমান্ডটি চালিয়েছি। তবে আমি যখন প্রশ্নটি জিজ্ঞাসা করেছি, তখন গৃহীত উত্তরটি সঠিক ছিল: মেসিদের এখনও এই চরিত্র-সীমাবদ্ধতা ছিল। এখন যে সীমাবদ্ধতা চলে গেছে এবং গিট কনফিগারেশন কোর.লংপথগুলি যেমন এটি করা উচিত সত্য কাজ করে।
পাপা মাফলন

ঠিক আছে, আমি তখন একমত
v.karbovnichy

উত্তর:


701

উইকিপিডিয়া বাদে যখন গিটকে এমএসএস দিয়ে সংকলিত করা হয় তখন ফাইলের নামের জন্য গিটের 4096 টি অক্ষরের সীমা থাকে। এটি উইন্ডোজ এপিআই এর একটি পুরানো সংস্করণ ব্যবহার করে এবং একটি ফাইলের নামের জন্য 260 অক্ষরের সীমা রয়েছে।

যতদূর আমি এটি বুঝতে পারি, এটি মিসের একটি সীমাবদ্ধতা, গিটের নয়। আপনি বিশদটি এখানে পড়তে পারেন: https://github.com/msysgit/git/pull/110

আপনি উইন্ডোজে অন্য গিট ক্লায়েন্ট ব্যবহার করে বা এটিকে উত্তর হিসাবে বর্ণিত হিসাবে সেট core.longpathsকরতে পারেন true

git config --system core.longpaths true

গিট স্ক্রিপ্টস এবং সংকলিত কোডের সংমিশ্রণ হিসাবে নির্মিত। উপরের পরিবর্তনের সাথে সাথে কিছু স্ক্রিপ্ট ব্যর্থ হতে পারে। কোর.লংপথগুলি ডিফল্টরূপে সক্ষম না হওয়ার কারণ।

Https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file এ উইন্ডোজ ডকুমেন্টেশনটিতে আরও কিছু তথ্য রয়েছে:

উইন্ডোজ 10, সংস্করণ 1607 থেকে শুরু করে, সাধারণ উইন 32 ফাইল এবং ডিরেক্টরি ফাংশন থেকে MAX_PATH সীমাবদ্ধতা সরানো হয়েছে। তবে আপনাকে অবশ্যই নতুন আচরণের বিকল্প বেছে নিতে হবে।

একটি রেজিস্ট্রি কী আপনাকে নতুন দীর্ঘ পাথ আচরণ সক্ষম বা অক্ষম করতে দেয়। দীর্ঘ পাথ আচরণ সক্ষম করতে HKLM Y SYSTEM \ কারেন্ট কন্ট্রোলসেট \ নিয়ন্ত্রণ \ ফাইলসিসট লংপ্যাথস সক্ষম হয়েছে (টাইপ করুন: REG_DWORD) এ রেজিস্ট্রি কী সেট করুন


19
কোনও পথে 260 অক্ষরের সীমাবদ্ধতা এমএসওয়াইএসের জন্য নির্দিষ্ট নয়, এটি একটি সাধারণ উইন্ডোজ এপিআই অনুকরণ। ইউনিকোড পাথ ব্যবহার করে এটি প্রায় কাজ করা যেতে পারে, তবে এর মধ্যে অন্যান্য ঘাটতি রয়েছে, যে কারণে core.longpathsএটি ডিফল্টরূপে সক্ষম হয় না। এছাড়াও নোট করুন যে উইন্ডোজের জন্য গিট এটি এমএসওয়াইএসের বিরুদ্ধে সংকলিত হয়নি। পরিবর্তে, এটি একটি নেটিভ উইন্ডোজ অ্যাপ্লিকেশন যা স্ট্রিপড ডাউন এমএসওয়াইএস পরিবেশের সাথে আসে।
স্কুবার্থ

3
@ এসচুবার্থ: দীর্ঘ পথ সমর্থন করে না এমন প্রোগ্রামগুলির সাথে সামঞ্জস্যতার অভাব ব্যতীত অন্য কোনও অসুবিধা আছে কি?
জ্যাব

3
@ জ্যাব আরেকটি অসুবিধা হ'ল দীর্ঘ পথ সর্বদা নিরঙ্কুশ হতে হবে; আপেক্ষিক পাথ সমর্থিত নয়। আরও তথ্যের জন্য এখানে দেখুন
sschuberth

4
বা দ্রুত সমাধান হিসাবে, কেবলমাত্র আপনার রেপো সি: / উইন্ডোতে চেকআউট করার চেষ্টা করুন যাতে ফোল্ডারের পাথের অক্ষরের সংখ্যা হ্রাস হয়।
অক্ষয় লোকুর

5
এফওয়াইআই, এতক্ষণে বিষয়টি এখনও অব্যাহত রয়েছে। আমরা একটি বাস্তব অপারেটিং সিস্টেমের অব্যাহত বিকাশের বিষয়টি বিবেচনা করতে চাই ...
Göza Török

1033

আপনার কমান্ডটি চালানো উচিত

git config --system core.longpaths true

বা একবার গিটের সমর্থিত সংস্করণে এলে এই কার্যকারিতাটি চালু করতে ম্যানুয়ালি আপনার গিট কনফিগারেশন ফাইলগুলিতে এটিকে যুক্ত করুন। দেখে মনে হচ্ছে এটি সম্ভবত 1.9.0 এবং তার পরে।


13
এই কনফিগারেশন বিকল্পটি আমার জন্য সমস্যাটি স্থির করেছে, এমনকি গ্রহণযোগ্য উত্তরে উল্লিখিত এমএসএসির সাথেও। (বিশেষত, সংস্করণ 1.9.4.msysgit.2)।
অ্যালেক্স ওসোবার 21

5
সোর্সট্রি কিছুটা অদ্ভুত আচরণ করে যদি না আপনি "এটিও নিশ্চিত করে রাখেন যে সোর্সট্রি সিস্টেমের গিট ব্যবহার করছে এবং এম্বেডডটি নয়" " - ধন্যবাদ Matej Drolc যে পরামর্শ
bstoney

38
এটি ডিফল্টরূপে সক্ষম করা হয়নি কেন এবং কিছু প্রযুক্তিগত বিশদ এখানে কিছু ব্যাকগ্রাউন্ড তথ্য।
স্কুবার্থ

12
উপরের কমান্ডটি চালানোর পরে "কনফিগারেশন ফাইলটি লক করা যায়নি সি: \ প্রোগ্রাম ফাইলগুলি it গিট \ মিংডব্লু / ইত্যাদি / গিটকনফিগ" পান get তবে @ যশ উত্তরটি আমার পক্ষে কাজ করেছে
splitByZero

10
অ্যাডমিনিস্ট্রেটর হিসাবে ডিভিডবাইজারো গিট ব্যাশ চালানো সেই ত্রুটিটি রোধ করে।
নিক

204

এটি সাহায্য করতে পারে:

git config core.longpaths true

প্রাথমিক ব্যাখ্যা: এই উত্তরটি বিশ্বব্যাপী সিস্টেমের (যেমন এড়ানো --systemবা --globalট্যাগ করা সমস্ত প্রকল্পের ) কনফিগারেশনের ক্ষেত্রে এ জাতীয় সেটিংস প্রয়োগ না করার পরামর্শ দেয় । এই কমান্ডটি কেবলমাত্র বর্তমান প্রকল্পের জন্য নির্দিষ্ট হয়ে সমস্যার সমাধান করে by


13
লোকেরা এখানে উল্লেখ করেছে যে এই সেটিংটি কিছু অনির্দেশ্য আচরণের প্রবর্তন করতে পারে তাই মনে হয় যে --systemসমস্ত প্রকল্পগুলিতে এটি প্রয়োগ করার পরিবর্তে প্রয়োজনীয় সংস্থাগুলির উপরে স্থানীয় কমান্ড হিসাবে উপরের কমান্ডটি ব্যবহার করা ভাল
গ্রান্ট হামফ্রিজ

4
আরে, এটি অন্যান্য উচ্চ উত্তরের উত্তরের কেবল একটি কপিপাস্টা। আপনি কেন - সিস্টেমে বিকল্পটি অপসারণ করতে চান তা খুব কমপক্ষে ব্যাখ্যা করতে পারে ..
ফলিক্স গাগনন-গ্রেনিয়ার

78

.Gitconfig তৈরি করুন এবং যুক্ত করুন

[core]
longpaths = true

আপনি ফাইলটি কোনও প্রকল্পের স্থানে (নিশ্চিত নয়) এবং বিশ্বব্যাপী অবস্থানেও তৈরি করতে পারেন। আমার ক্ষেত্রে লোকেশন হয় C:\Users\{name}\


10
আপনি নিম্নলিখিত কমান্ডটি দিয়ে এটিও করতে পারেন:git config --global core.longpaths true
কোঁকড়া

গিট কনফিগারেশন - গ্লোবাল কোর.লংপথ সত্যই আমার জন্য কাজ করেছেন ধন্যবাদ
রামা কৃষ্ণ ইলা

1
উপরের ভিজ্যুয়াল স্টুডিওটি গিট ব্যাশ সমাধানগুলি আমার পক্ষে কাজ করে নি, তবে প্রকল্পের জন্য .git / কনফিগারেশন ফাইলটি সন্ধান এবং উপরের চিত্রের মতো সম্পাদনা করেছে। ধন্যবাদ যশ
অ্যান্ড্রু পেট

এটি আমার পক্ষে কাজ করেছিল, আমি সেই ফাইলটি সন্ধান করেছি এবং এটিকে ম্যানুয়ালি সংশোধন করেছি
প্যাট্লাস

1
উপরের উল্লিখিত এবং যাচাইকৃত উত্তরগুলি সঠিক তবে ফাইলে যে অনুমতি দেওয়া হয়েছে তা দিয়ে those আদেশগুলি দিয়ে ফাইল আপডেট করা সম্ভব নাও হতে পারে। এই পদ্ধতিটি সত্যই সহজ কারণ এটি হ'ল ম্যানুয়াল পদ্ধতি এবং এটি আমার পক্ষে সত্যই ভাল কাজ করেছে। আপনি .gitconfigনীচের পথে সহজেই ফাইলটি সন্ধান করতে পারবেন C:\Users\{username}এবং এটিকে সম্পাদনা করতে পারবেন।
কবিন্দু নারথোটা

53

অনুসরণের পদক্ষেপগুলি:

  1. প্রশাসক হিসাবে গিট বাশ চালান
  2. নিম্নলিখিত কমান্ড চালান:
git config --system core.longpaths true

দ্রষ্টব্য : যদি পদক্ষেপ 2 কাজ না করে বা কোনও ত্রুটি দেয় তবে আপনি এই আদেশটি চালানোর চেষ্টা করতে পারেন:

git config --global core.longpaths true

git config এখানে আরও পড়ুন ।


35

আরও ভাল সমাধান গিট থেকে লংপথ প্যারামিটার সক্ষম করে।

git config --system core.longpaths true

তবে কাজের মতো একটি কাজ হ'ল গিট থেকে নোড_মডিউলগুলি ফোল্ডারটি সরিয়ে ফেলা:

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

.Gitignore ফাইলের ভিতরে একটি নতুন সারিতে নোড_মডিউলগুলি যুক্ত করুন। এটি করার পরে, আপনার পরিবর্তনগুলি টিপুন:

$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push

3
নোড_মডিউল ফোল্ডারটি গিটে চেক করে রাখার একটি ভাল কারণ রয়েছে: আপনি যদি চান যে আপনার সফ্টওয়্যারটি এক বছর মডিউলগুলির পরে এনএমপি থেকে অপসারণের পরে একই আচরণ করে।
cfstras

@cfstras যদি কিছু লাইব্রেরিতে দুর্বলতা থাকে এবং আপনি পর্যায়ক্রমে আপডেট না করেন তবে অবশ্যই আপনার সুরক্ষা সমস্যা হবে।
জ্যান্ডারসন সিলভা

1
অবশ্যই আপনাকে আপনার নির্ভরতা আপগ্রেড করতে হবে। তবে কেবল যখন আপনি চান, এবং যদি কোনও কিছু ভেঙে ফেলা হয় তবে আপনি
গিটে

সত্য. আমি আমার আনসারটি সম্পাদনা করব। তোমার মন্তব্যের জন্য ধন্যবাদ।
জ্যান্ডারসন সিলভা

1
প্রতিশ্রুতি দেওয়ার দরকার নেই node_modules: packages.lockফাইলটি ইনস্টল করা সংস্করণটি npm installসর্বদা একই রকম থাকবে তা নিশ্চিত করার জন্য এখানে আপনি যতক্ষণ না করেনnpm update
পিয়েরে-অলিভিয়ার ভারেস

32

সম্পূর্ণরূপে নিশ্চিত হয়ে উঠুন যে এটি সংগ্রহস্থল শুরু হওয়ার সাথে সাথেই কার্যকর হয়, তবে দূরবর্তী ইতিহাস আনার আগে বা কোনও ফাইল যাচাই-বাছাই করার আগে, এটি এভাবে ব্যবহার করা নিরাপদ:

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

-সি কী = মান

সদ্য নির্মিত সংগ্রহস্থলে কনফিগারেশন ভেরিয়েবল সেট করুন; এটি সংগ্রহস্থল শুরু হওয়ার সাথে সাথে কার্যকর হয় তবে দূরবর্তী ইতিহাস আনার আগে বা কোনও ফাইল চেক আউট হওয়ার আগে। গিট-কনফিগারেশন 1 (যেমন, কোর.ইওল = সত্য) দ্বারা প্রত্যাশা অনুযায়ী কীটি একই ফর্ম্যাটে রয়েছে । যদি একই কী এর জন্য একাধিক মান দেওয়া হয় তবে প্রতিটি মান কনফিগার ফাইলে লেখা হবে। এটি এটি নিরাপদ করে তোলে, উদাহরণস্বরূপ, মূল রিমোটে অতিরিক্ত আনার রেফস্পেক যুক্ত করা।

অধিক তথ্য


24

মৃত্যুদণ্ড কার্যকর git config --system core.longpaths trueকরার ফলে একটি ত্রুটি ছুঁড়েছে :

"ত্রুটি: কনফিগারেশন ফাইলটি লক করা যায়নি সি: \ প্রোগ্রাম ফাইলগুলি (x86) it গিট \ মিংডব্ব 32 / ইত্যাদি / গিটকনফিগ: অনুমতি অস্বীকার করা হয়েছে"

বিশ্বব্যাপী কমান্ড কার্যকর করার সাথে স্থির:

git config --global core.longpaths true

গ্লোবাল সেটিংস কেবলমাত্র বর্তমান ব্যবহারকারীকে প্রভাবিত করে, অন্যদিকে সিস্টেম সেটিংস মেশিনের সমস্ত ব্যবহারকারীকে প্রভাবিত করে। যদি এটি আপনার ওয়ার্কস্টেশন হয় তবে তারা কার্যকরভাবে একই হ'ল আপনি কেবলমাত্র একজন ব্যবহারকারী ব্যবহার করতে পারেন।
তোয়ালে

4
আপনি যদি কমান্ড লাইন অ্যাপ্লিকেশন প্রশাসক হিসাবে রান হন, প্রথম কমান্ড কাজ করবে!
সচিথ ডিকওয়েলা

12

আপনি দীর্ঘ ফাইল পাথ সক্ষম করার চেষ্টা করতে পারেন।

আপনি যদি উইন্ডোজ 10 হোম সংস্করণ চালান তবে আপনি দীর্ঘ পাথ সক্ষম করতে আপনার রেজিস্ট্রি পরিবর্তন করতে পারেন।

যান HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemমধ্যে regeditএবং তারপর সেট LongPathsEnabledকরতে 1

আপনার যদি উইন্ডোজ 10 প্রো বা এন্টারপ্রাইজ থাকে তবে আপনি স্থানীয় গোষ্ঠী নীতিগুলিও ব্যবহার করতে পারেন।

যান কম্পিউটার কনফিগারেশনপ্রশাসনিক টেমপ্লেটসিস্টেমফাইলসিস্টেম মধ্যে gpedit.msc, খোলা দীর্ঘ পাথ সক্রিয় Win32 করুন এবং এটি সেট সক্রিয়


5
আমি বিশ্বাস করি এটি গিট কনফিগারেশনের সাথে অবশ্যই সম্পন্ন করা উচিত, এবং এখানে উল্লিখিত কারণে উইন্ডোজ এক্সপ্লোরারের সাথে এটি কাজ করে না এটি লক্ষণীয় ।
নিও

11
git config --global core.longpaths true

উপরের কমান্ডটি আমার পক্ষে কাজ করেছিল। '- সিস্টেমে' ব্যবহার করে কনফিগার ফাইলটি ত্রুটিযুক্ত নয় gave


2
গিথুব ডেস্কটপ ব্যবহারকারীদের জন্য, এটি কেবলমাত্র কাজ করে কারণ গিথুব ডেস্কটপ তার নিজস্ব গিট কনফিগারেশন ব্যবহার করে।
Csaba

4

আপনার ড্রাইভের রুটে ভান্ডারগুলি সরান (অস্থায়ী সংশোধন)

আপনি অস্থায়ীভাবে স্থানীয় ড্রাইভের (পুরো ফোল্ডারটি) আপনার ড্রাইভের রুটে বা যতটা সম্ভব মূলের কাছে যেতে চেষ্টা করতে পারেন।

যেহেতু ড্রাইভের মূলটিতে পথটি ছোট, তাই এটি কখনও কখনও সমস্যার সমাধান করে।

উইন্ডোজে, আমি এটিকে C:\বা অন্য কোনও ড্রাইভের রুটে নিয়ে যেতে চাই ।


2
এটিই আমার সমস্যা সমাধান করেছে। এটি ছিল আমার পথে অনেকগুলি ফোল্ডার ছিল।
জে ব্রুনে

2

আমার এই ত্রুটিটিও ছিল, তবে আমার ক্ষেত্রে কারণটি এনপিএম, v1.4.28 এর একটি পুরানো সংস্করণ ব্যবহার করছে।

এরপরে এনপিএম ভি 3 এ আপডেট করা হচ্ছে

rm -rf node_modules
npm -i

আমার জন্য কাজ। এনপিএম ইস্যু 2697 এ এনপিএম ভি 3 (2015-06-25 প্রকাশিত) এ অন্তর্ভুক্ত "সর্বাধিক ফ্ল্যাট" ফোল্ডার কাঠামোর বিশদ রয়েছে।


1

আপনি যদি আপনার এনক্রিপ্ট করা পার্টিশনের সাথে কাজ করে থাকেন তবে ফোল্ডারটিকে একটি এনক্রিপ্ট করা পার্টিশনে স্থানান্তর বিবেচনা করুন, উদাহরণস্বরূপ a / tmp , চলমান git pullএবং তারপরে পিছনে সরে যেতে।


0

একটি উইন্ডোজ মেশিনে

অ্যাডমিনিস্ট্রেটর হিসাবে কমান্ড প্রম্পট চালান তারপর কমান্ডের নীচে চালান run

গিট কনফিগারেশন - সিস্টেম কোর.লংপথ সত্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.