विंडोज के लिए Git में बहुत लंबा नाम


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। फिर उपर्युक्त Git कमांड को दोहराएं।

मुझे यहां क्या समझ नहीं आ रहा है?


आपने कहां पढ़ा है कि उस संस्करण को लंबे फ़ाइल नाम को ठीक करना चाहिए?
इविकी

यहाँ पैच के लिए पुल अनुरोध है: github.com/msysgit/git/pull/122
पापा मफलन

@PapaMufflon क्या आप स्वीकृत स्कोर को अधिक स्कोर के साथ बदल सकते हैं? इसने मुझे बहुत मदद की।
v.karbovnichy

@ v.karbovnichy कृपया मेरे प्रश्न को ध्यान से पढ़ें। मैंने पहले से ही शीर्ष मतदान के जवाब में कमान चलाई। लेकिन जिस समय मैंने सवाल पूछा, स्वीकृत जवाब सही था: एमएसआईएस में अभी भी यह चरित्र-सीमा थी। अब यह सीमा समाप्त हो गई है और यह सही होना चाहिए।
पापा मफलन

ठीक है, मैं तब सहमत हूँ
v.karbovnichy

जवाबों:


701

Git में फ़ाइल नाम के लिए 4096 वर्णों की सीमा होती है, जब Windows को Gys को msys के साथ संकलित किया जाता है। यह Windows API के पुराने संस्करण का उपयोग करता है और फ़ाइल नाम के लिए 260 वर्णों की सीमा है।

जहाँ तक मैं यह समझता हूँ, यह msys की सीमा है और Git की नहीं। आप विवरण यहाँ पढ़ सकते हैं: https://github.com/msysgit/git/pull/110

आप Windows पर किसी अन्य Git क्लाइंट का उपयोग करके इसे दरकिनार कर सकते हैं या अन्य उत्तरों में बताए अनुसार सेट core.longpathsकर trueसकते हैं।

git config --system core.longpaths true

Git को स्क्रिप्ट और संकलित कोड के संयोजन के रूप में बनाया जाता है। उपरोक्त परिवर्तन से कुछ स्क्रिप्ट विफल हो सकती हैं। यही कारण है कि core.longpaths को डिफ़ॉल्ट रूप से सक्षम नहीं किया जाना है।

Https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file पर विंडोज़ के दस्तावेज़ में कुछ और जानकारी है:

विंडोज 10 में शुरू, संस्करण 1607, MAX_PATH सीमाएं आम Win32 फ़ाइल और निर्देशिका कार्यों से हटा दी गई हैं। हालाँकि, आपको नए व्यवहार के लिए ऑप्ट-इन करना होगा।

एक रजिस्ट्री कुंजी आपको नए लंबे पथ व्यवहार को सक्षम या अक्षम करने की अनुमति देती है। लंबे पथ व्यवहार को सक्षम करने के लिए HKLM \ SYSTEM \ CurrentControlSet \ Control \ FileSystem LongPathsEnabled पर रजिस्ट्री कुंजी सेट करें (टाइप करें: REG_DWORD)


19
एक मार्ग में 260 वर्णों की सीमा MSYS के लिए विशिष्ट नहीं है, यह एक सामान्य विंडोज एपीआई नकल है। यूनिकोड रास्तों का उपयोग करके इसके आसपास काम किया जा सकता है, लेकिन इसमें अन्य कमियां हैं, यही वजह core.longpathsहै कि डिफ़ॉल्ट रूप से सक्षम नहीं है। यह भी ध्यान दें कि विंडोज के लिए Git यह MSYS के खिलाफ संकलित नहीं है। इसके बजाय, यह एक मूल विंडोज़ अनुप्रयोग है जो एक स्ट्रिप-डाउन MSYS वातावरण के साथ आता है।
sschuberth

3
@sschuberth: क्या ऐसे कार्यक्रमों के साथ संगतता की कमी के अलावा कोई कमियां हैं जो लंबे रास्तों का समर्थन नहीं करती हैं?
JAB

3
@JAB एक और दोष यह है कि लंबे रास्तों को हमेशा निरपेक्ष रहना पड़ता है; सापेक्ष पथ समर्थित नहीं हैं। अधिक जानकारी के लिए कृपया यहाँ देखें ।
sschuberth

4
या एक त्वरित समाधान के रूप में, बस अपने रेपो को C: / windows पर चेकआउट करने का प्रयास करें, इस प्रकार फ़ोल्डर पथ वर्णों की संख्या कम हो जाती है।
अक्षय लोकुर

5
FYI करें, अब तक यह मुद्दा अभी भी कायम है। हम एक वास्तविक ऑपरेटिंग सिस्टम पर निरंतर विकास पर विचार करना चाह सकते हैं ...
Géza Török

1033

आपको कमांड चलाने में सक्षम होना चाहिए

git config --system core.longpaths true

एक बार जब आप गिट के समर्थित संस्करण पर होते हैं, तो इस कार्यक्षमता को चालू करने के लिए इसे अपनी Git कॉन्फ़िगरेशन फ़ाइलों में से किसी एक में जोड़ें। ऐसा लगता है कि शायद 1.9.0 और उसके बाद।


13
इस विन्यास विकल्प ने मेरे लिए समस्या को ठीक कर दिया, यहां तक ​​कि एमएसआई के साथ भी स्वीकार किए गए उत्तर में उल्लेख किया गया। (विशेष रूप से, संस्करण 1.9.4.msysgit.2)।
एलेक्स ओसबोर्न

5
Sourcetree थोड़ा अजीब काम करता है जब तक कि आप "यह सुनिश्चित न करें कि SourceTree सिस्टम के Git का उपयोग कर रहा है और एम्बेडेड नहीं है।" - के लिए धन्यवाद मेटि़ज Drolc के लिए कि सलाह
bstoney

38
यहां कुछ पृष्ठभूमि की जानकारी है कि यह डिफ़ॉल्ट रूप से सक्षम क्यों नहीं है, और कुछ तकनीकी विवरण।
sschuberth

12
ऊपर दिए गए कमांड के बाद "config फाइल C: \ Program Files \ Git \ mingw64 / etc / gitconfig" को लॉक नहीं कर सकते। लेकिन @ यश जवाब ने मेरे लिए काम किया
divideByZero

10
@divideByZero व्यवस्थापक के रूप में git bash चलाने से उस त्रुटि को रोकता है।
नीक

204

यह मदद कर सकता है:

git config core.longpaths true

मूल व्याख्या: यह उत्तर बताता है कि वैश्विक प्रणाली पर लागू होने वाली ऐसी सेटिंग नहीं है (सभी परियोजनाओं से तो परहेज --systemया --globalटैग के लिए) कॉन्फ़िगरेशन। यह आदेश केवल वर्तमान प्रोजेक्ट के लिए विशिष्ट होने से समस्या का हल करता है।


13
लोग यहाँ उल्लेख किया है कि इस सेटिंग को कुछ अप्रत्याशित व्यवहार लागू कर सकते हैं तो ऐसा लगता है कि यह परियोजनाओं है कि यह नहीं बल्कि जोड़कर से की आवश्यकता होती है जहां पर एक स्थानीय सेटिंग के रूप में उपरोक्त आदेश उपयोग को प्राथमिकता दी --systemहै जो इसे सभी परियोजनाओं पर लागू होगी
अनुदान हम्फ्रीज़

4
हे, यह अन्य अत्यधिक उत्कट उत्तर का सिर्फ एक कॉपिस्ता है। बहुत कम से कम यह समझाएं कि आप --system विकल्प को हटाना क्यों पसंद करते हैं ..
Félix Gagnon-Grenier

78

.Gitconfig बनाएं और जोड़ें

[core]
longpaths = true

आप फ़ाइल को प्रोजेक्ट स्थान (सुनिश्चित नहीं) और वैश्विक स्थान में भी बना सकते हैं। मेरे मामले में स्थान है C:\Users\{name}\


10
आप इसे निम्न आदेश के साथ भी कर सकते हैं:git config --global core.longpaths true
घुंघराले

git config --global core.longpaths true ने मेरे लिए काम किया धन्यवाद
राम कृष्ण इला

1
विज़ुअल स्टूडियो के ऊपर दिए गए git bash सॉल्यूशंस का उपयोग करना मेरे लिए काम नहीं करता था, लेकिन प्रोजेक्ट के लिए .it / config फाइल ढूंढना और जैसा कि दिखाया गया था, संपादन करना। धन्यवाद यश
andrew pate

यह मेरे लिए काम करता है, मैं उस फ़ाइल को स्थित करता हूं और इसे मैन्युअल रूप से संशोधित करता
हूं

1
उपर्युक्त वर्णित और सत्यापित उत्तर सही हैं, लेकिन जिन अनुमतियों के साथ फाइल दी गई है, उन कमांड के साथ फाइल को अपडेट करना संभव नहीं हो सकता है। यह दृष्टिकोण वास्तव में आसान है क्योंकि यह मैनुअल दृष्टिकोण है और इसने मेरे लिए वास्तव में अच्छा काम किया। आप आसानी .gitconfigसे निम्न पथ में फ़ाइल पा सकते हैं C:\Users\{username}और बस इसे संपादित कर सकते हैं।
काविन्दु नरथोता

53

अनुसरण करने के चरण:

  1. व्यवस्थापक के रूप में गिट बैश चलाएं
  2. निम्न आदेश चलाएँ:
git config --system core.longpaths true

नोट : यदि चरण 2 काम नहीं करता है या कोई त्रुटि देता है, तो आप इस कमांड को चलाने का भी प्रयास कर सकते हैं:

git config --global core.longpaths true

git config यहाँ और अधिक पढ़ें ।


35

बेहतर समाधान Git से longpath पैरामीटर को सक्षम करता है।

git config --system core.longpaths true

लेकिन एक वर्कअराउंड जो काम करता है, वह Git के नोड_मॉडल फ़ोल्डर को हटा देता है:

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

.Gitignore फ़ाइल के अंदर एक नई पंक्ति में node_modules जोड़ें। ऐसा करने के बाद, अपने संशोधनों को धक्का दें:

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

3
नोड_मॉडल्स फ़ोल्डर को git में रखने का एक अच्छा कारण है: यदि आप चाहते हैं कि आपका सॉफ़्टवेयर npm से गायब होने वाले मॉड्यूल के एक साल बाद उसी तरह का व्यवहार करे।
cfstras 15

@ यदि कुछ लाइब्रेरी में कमजोरता है और आप समय-समय पर अपडेट नहीं करते हैं, तो निश्चित रूप से आपको सुरक्षा समस्याएं होंगी।
जॉन्डर्सन सिल्वा

1
बेशक आपको अपनी निर्भरता को अपग्रेड करना होगा। लेकिन केवल जब आप चाहते हैं, और अगर कुछ टूटना था, तो आप गिट में अपना बैकअप चाहते हैं ...
cfstras

सच हैं। मैं अपनी अन्वेषक को संपादित करूँगा। आपकी टिप्पणी के लिए धन्यवाद।
जैंडरसन सिल्वा

1
करने की कोई ज़रूरत नहीं है node_modules: packages.lockफ़ाइल यहाँ है यह सुनिश्चित करने के लिए कि आपके द्वारा स्थापित संस्करण npm installहमेशा एक ही होगा, जब तक कि आप एकnpm update
पियरे-ओलिवियर वेर्स

32

यह सुनिश्चित करने के लिए कि रिपॉजिटरी के आरंभ होने के तुरंत बाद यह प्रभावी हो जाता है, लेकिन इससे पहले कि दूरस्थ इतिहास प्राप्त किया जाए या किसी भी फाइल को चेक किया जाए, यह इस तरह से उपयोग करना अधिक सुरक्षित है:

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

-सी कुंजी = मान

नव-निर्मित भंडार में एक कॉन्फ़िगरेशन चर सेट करें; रिपॉजिटरी के आरंभ होने के तुरंत बाद यह प्रभावी हो जाता है, लेकिन इससे पहले कि दूरस्थ इतिहास को प्राप्त किया जाए या किसी भी फाइल को चेक किया जाए। कुंजी उसी प्रारूप में है जो git-config 1 (जैसे, core.eol = true) द्वारा अपेक्षित है । यदि एक ही कुंजी के लिए कई मान दिए गए हैं, तो प्रत्येक मान कॉन्फ़िग फ़ाइल में लिखा जाएगा। यह इसे सुरक्षित बनाता है, उदाहरण के लिए, मूल रिमोट में अतिरिक्त भ्रूण रीस्पेक जोड़ने के लिए।

और जानकारी


24

निष्पादित git config --system core.longpaths trueमेरे लिए एक त्रुटि फेंक दिया:

"त्रुटि: कॉन्फिग फाइल को लॉक नहीं कर सका C: \ Program Files (x86) \ Git \ mingw32 / etc / gitconfig: अनुमति अस्वीकृत"

वैश्विक स्तर पर कमांड को निष्पादित करने के साथ फिक्स्ड:

git config --global core.longpaths true

वैश्विक सेटिंग्स केवल वर्तमान उपयोगकर्ता को प्रभावित करती हैं, जबकि सिस्टम सेटिंग्स मशीन के सभी उपयोगकर्ताओं को प्रभावित करती हैं। यदि यह आपका वर्कस्टेशन है तो वे प्रभावी रूप से उसी तरह हैं जैसे आप केवल एक उपयोगकर्ता का उपयोग कर सकते हैं।
तौलिया

4
यदि आप कमांड लाइन आवेदन रैन प्रशासक के रूप में कर रहे हैं, तो पहले कमांड काम करेगा!
सचिन डिकवेला

12

आप लंबे फ़ाइल पथ को सक्षम करने का भी प्रयास कर सकते हैं।

यदि आप विंडोज 10 होम एडिशन चलाते हैं तो आप लंबे रास्तों को सक्षम करने के लिए अपनी रजिस्ट्री को बदल सकते हैं।

पर जाएं HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemमें regeditऔर फिर सेट LongPathsEnabledकरने के लिए 1

अगर आपके पास विंडोज 10 प्रो या एंटरप्राइज है तो आप लोकल ग्रुप पॉलिसीज का भी इस्तेमाल कर सकते हैं।

पर जाएं कंप्यूटर कॉन्फ़िगरेशनव्यवस्थापकीय टेम्पलेटसिस्टमफ़ाइल में gpedit.msc, खुले लंबे रास्तों सक्षम Win32 और के लिए सेट सक्षम


5
मेरा मानना ​​है कि इसे git config के साथ संयोजन में किया जाना चाहिए, और यह ध्यान देने योग्य है कि यह यहां बताए गए कारणों के लिए Windows Explorer के साथ काम नहीं करता है
नियो

11
git config --global core.longpaths true

उपरोक्त आदेश ने मेरे लिए काम किया। '--System' के प्रयोग से मुझे कॉन्फिग फाइल मिली कि लॉक की गई त्रुटि नहीं


2
Github डेस्कटॉप उपयोगकर्ताओं के लिए, यह केवल वही है जो काम करता है क्योंकि Github डेस्कटॉप अपने स्वयं के Git config का उपयोग करता है।
कसाबा

4

अपने ड्राइव के रूट पर अस्थायी रिपॉजिटरी ले जाएं (अस्थायी फिक्स)

आप अपने ड्राइव के रूट पर या यथासंभव रूट रिपॉजिटरी (संपूर्ण फ़ोल्डर) को अस्थायी रूप से स्थानांतरित करने का प्रयास कर सकते हैं।

चूंकि ड्राइव की जड़ में पथ छोटा है, यह कभी-कभी मुद्दों को ठीक करता है।

विंडोज पर, मैं इसे C:\या किसी अन्य ड्राइव के रूट पर ले जाऊंगा।


2
यह केवल एक चीज है जिसने मेरे मुद्दे को हल किया। यह था कि मेरे पास पथ में बहुत सारे फ़ोल्डर थे।
जे ब्रून

2

मेरे पास यह त्रुटि भी थी, लेकिन मेरे मामले में इसका कारण npm, v1.4.28 के पुराने संस्करण का उपयोग करना था।

इसके बाद npm v3 को अपडेट किया जा रहा है

rm -rf node_modules
npm -i

मेरे लिए काम किया। npm समस्या 2697 में npm v3 (जारी 2015-06-25) में शामिल "अधिकतम फ्लैट" फ़ोल्डर संरचना का विवरण है।


1

यदि आप अपने एन्क्रिप्टेड विभाजन के साथ काम कर रहे हैं, तो फ़ोल्डर को एक अनएन्क्रिप्टेड पार्टीशन पर ले जाने पर विचार करें, उदाहरण के लिए / tmp , रनिंग git pull, और फिर वापस जाना।


0

एक विंडोज़ मशीन में

Run Command Prompt को एडमिनिस्ट्रेटर के रूप में चलाएँ फिर कमांड के नीचे चलाएँ

git config --system core.longpaths सच है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.