खिड़कियों में स्थानीय फाइल सिस्टम में GIT क्लोन रेपो


200

जब जीआईटी की बात आती है तो मैं पूरी तरह से नॉब हूं। मैं पिछले कुछ दिनों से सिर्फ अपना पहला कदम उठा रहा हूं। मैंने अपने लैपटॉप पर एक रेपो सेटअप किया, एसवीएन प्रोजेक्ट से ट्रंक को नीचे लाया (कुछ शाखाओं के साथ कुछ समस्याएँ थीं, उन्हें काम नहीं मिला), लेकिन सब ठीक लगता है।

मैं अब लैपटॉप से ​​अपने मुख्य डेस्कटॉप पर खींचने या धक्का देने में सक्षम होना चाहता हूं। लैपटॉप होने का कारण ट्रेन में काम करना है क्योंकि मैं दिन में 2 घंटे यात्रा करता हूं और कुछ अच्छे काम कर सकता हूं। लेकिन घर पर मेरी मुख्य मशीन विकास के लिए महान है। इसलिए मैं अपने घर आने पर लैपटॉप से ​​मुख्य कंप्यूटर को धक्का / खींचने में सक्षम होना चाहता हूं। मैंने सोचा था कि ऐसा करने का सबसे सरल तरीका यह होगा कि पूरे लैन में कोड फ़ोल्डर को साझा किया जाए और क्या करें:

git clone file://192.168.10.51/code

दुर्भाग्य से यह मेरे लिए काम नहीं कर रहा है:

इसलिए मैं एक git bash cmd खोलता हूं और उपरोक्त कमांड टाइप करता हूं, मैं C: \ code (दोनों मशीनों के लिए साझा किया गया फ़ोल्डर) यह वही है जो मुझे वापस मिलता है:

Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

मैं सबसे सरल तरीकों से दो मशीनों के बीच भंडार कैसे साझा कर सकता हूं।

अन्य स्थान होंगे जो आधिकारिक भंडारण बिंदु होंगे और ऐसे स्थान जहां से अन्य देव और CI सर्वर आदि खींचेंगे, यह सिर्फ इतना है कि मैं एक ही रेपो पर दो मशीनों पर काम कर सकता हूं।

सेबस्टियन के सुझाव के अनुसार, मुझे निम्नलिखित मिले:

C:\code>git clone --no-hardlinks file://192.168.10.51/code
Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

** संपादित करें - उत्तर **

सभी को धन्यवाद कि मदद की। मैंने एक ड्राइव की मैपिंग की कोशिश की और इतना काम किया कि मैंने सोचा कि मैं वापस जाऊंगा और बिना मैपिंग के फिर से काम करूंगा। अंतिम परिणाम था:

git clone file://\\\\192.168.0.51\code

यह बहुत अच्छा काम किया।

धन्यवाद


फ़ाइल: //192.168.10.51/code इसका कोई मतलब नहीं है कि एक वैध यूआरआई एक फ़ाइल की ओर इशारा करता है, जबकि फ़ाइल: // C: \ foo \ bar.txt है
ग्रेगरी पॉक्सोज़

फिर मैं इस तरह के संदर्भ के साथ एक दूरस्थ मशीन को कैसे इंगित कर सकता हूं?
जॉन

आप शायद एक नेटवर्क ड्राइव को मैप करना चाहते हैं।
जोश ली

मेरे लिए काम किया - ध्यान दें कि यह खिड़कियों के लिए विशिष्ट है और खिड़कियों में गिट बश से काम नहीं करेगा - cmd या पावरशेल का उपयोग करने की आवश्यकता है
डेव Rael

यह भी cmd में कोशिश की, लेकिन यह काम नहीं करता है। और यह भी कि "git क्लोन फाइल" में "कोड" क्या है: // \\\\ 192.168.0.51 \ "कोड" का अर्थ है? मैंने इसे "C: / UniserverZ / www / sampleProject /" से बदल दिया और यह काम नहीं किया। यह कहा गया है कि इसकी एक
जीआई

जवाबों:


177

आप फ़ाइल प्रोटोकॉल में UNC पथ लागू करके दूरस्थ के URL को निर्दिष्ट कर सकते हैं । इसके लिए आपको चार स्लैश का उपयोग करना होगा:

git clone file:////<host>/<share>/<path>

उदाहरण के लिए, यदि आपकी मुख्य मशीन में IP 192.168.10.51 और कंप्यूटर का नाम है main, और इसका एक हिस्सा है, codeजो स्वयं एक गिट रिपॉजिटरी है, तो निम्नलिखित दोनों कमांड समान रूप से काम करना चाहिए:

git clone file:////main/code
git clone file:////192.168.10.51/code

यदि गिट रिपॉजिटरी एक उपनिर्देशिका में है, तो बस पथ को जोड़ें:

git clone file:////main/code/project-repository
git clone file:////192.168.10.51/code/project-repository

2
क्या उस योजना के साथ प्रमाणीकरण करने का कोई तरीका है (अर्थात उपयोगकर्ता नाम / पासवर्ड)?
intuited

1
@ मज्जी मैं लगभग केवल विंडोज का उपयोग करता हूं, इसलिए मेरा समाधान विंडोज के लिए काम करता है।
प्रहार करें

1
हाँ यह खिड़कियों में यह करने के लिए सबसे अच्छा तरीका है।
निकोलस डिपियाज़ा

3
कोई भी प्रोटोकॉल का उपयोग कर सकता है: //// उपयोगकर्ता: पासवर्ड @ होस्ट: पोर्ट / पथ संकेतन, उदाहरण के लिए: फ़ाइल: /// उपयोगकर्ता: password@192.168.10.51/code
pistache

1
@OderWat सिवाय इसके कि लोकलहोस्ट का उपयोग करते समय किसी अलग कंप्यूटर को एक्सेस करने की कोशिश करते समय आपकी मदद नहीं की जाएगी, यही सवाल था। यदि आप एक स्थानीय रिपॉजिटरी का उपयोग करना चाहते हैं , जो कि आपके फाइल सिस्टम में स्थानीय रूप से मौजूद है, तो आप फ़ाइल प्रोटोकॉल का उपयोग किए बिना केवल एक स्थानीय पथ का उपयोग कर सकते हैं ...
प्रहार करें

125
$ git clone --no-hardlinks /path/to/repo

उपरोक्त कमांड आपके git रिपॉजिटरी के साथ निर्देशिका के लिए POSIX पाथ नोटेशन का उपयोग करता है। विंडोज के लिए यह (डायरेक्टरी C:/path/to/repoमें .gitडायरेक्टरी है):

C:\some\dir\> git clone --local file:///C:/path/to/repo my_project

रिपॉजिटरी को क्लोन किया जाएगा C:\some\dir\my_project। यदि आप file:///भाग को छोड़ देते हैं तो --localविकल्प निहित है।


7
यह मेरे लिए रिक्त स्थान के साथ फ़ाइल पथों के लिए काम करता है: git क्लोन -l फ़ाइल: // "C: \ SOME PATH \ with SPACES" my_project
सेबस्टियन पैटन

1
बड़ी मदद। यह मेरे लिए मेरी विंडो 7 मशीन में काम करता है। <git bash कमांड प्रॉम्प्ट से> कुछ इस तरह: git क्लोन फाइल: /// C: / Users / username / repsitoryName
Forhad

आप शायद बाद में रिमोट सेट करना चाहेंगे .. अन्यथा यह आपके अन्य स्थानीय को मूल के रूप में इंगित करता है जो मुझे सुपर एरर-प्रोन लगता है। git रिमोट -v का उपयोग करें; git रिमोट rm उत्पत्ति; git ऐड ओरिजिन <रेपो-एड्रेस> (जो आप मूल स्थानीय रेपो पर gv रिमोट -v करने के बाद कॉपी कर सकते हैं)
Hanan

यह सही है, आपको फ़ाइल की तरह url फ़ॉर्म का उपयोग करने की आवश्यकता नहीं है: ////, आप बस एक निर्देशिका को क्लोन कर सकते हैं।
पीटर एन। स्टीनमेट्ज़

14

मेजबान नाम के साथ जवाब मेरे लिए काम नहीं किया, लेकिन यह किया:

git क्लोन फाइल: ////home/git/repositories/MyProject.git/


1
ऐसा लगता है कि आपके पास "फ़ाइल:" के बाद बहुत अधिक स्लैश हैं। मेरे लिए, मैजिक नंबर 3 स्लैश था
मार्क एफ गुएरा

अजीब। चार स्लैश ने मुझे एक घातक त्रुटि दी। यह केवल (मेरे लिए) तीन के साथ काम करता था।
बिग मैकलर्जह्यूज

4
सिंटैक्स का पता लगाने के लिए मेरी चाल काम करती है कि फ़ोल्डर में एक txt फ़ाइल बनाना और इसे ब्राउज़र में खोलने के लिए खींचें। किसी फ़ाइल के लिए सही url दिखाई देता है।
अननेगाइल

7

मैं फ़ाइल का उपयोग करके ऐसा करने में सफल रहा: //, लेकिन एक निरपेक्ष पथ को निरूपित करने के लिए एक अतिरिक्त स्लैश के साथ।

git clone file:///cygdrive/c/path/to/repository/

मेरे मामले में मैं विंडोज के लिए सिग्विन पर Git का उपयोग कर रहा हूं, जिसे आप मेरे रास्तों में / cygdrive / c भाग के कारण देख सकते हैं। पथ के लिए कुछ मोड़ के साथ यह किसी भी गिट स्थापना के साथ काम करना चाहिए।

रिमोट जोड़ना उसी तरह काम करता है

git remote add remotename file:///cygdrive/c/path/to/repository/

6

शायद नेटवर्क ड्राइव के रूप में शेयर को मैप करें और फिर करें

git clone Z:\

ज्यादातर सिर्फ एक अनुमान; मैं हमेशा यह सामान ssh का उपयोग करता हूं। पाठ्यक्रम के उस शर्करा के बाद का मतलब होगा कि आपको उस ड्राइव को हर बार मैप करने की आवश्यकता होगी जो आप लैपटॉप से ​​पुश / पुल / करते हैं। मुझे यकीन नहीं है कि आप कैसे विंडोज़ के तहत काम करने के लिए ssh को रिग करते हैं, लेकिन यदि आप ऐसा करने जा रहे हैं तो यह बहुत कुछ जांच के लायक हो सकता है।


@ चेतावनी: मुझे लगता है कि यह तभी काम करेगा जब आप ड्राइव cdपर किसी अन्य डायरेक्टरी से नहीं जुड़ेंगे Z:। IIRC; मैं काफी समय में विंडोज यूजर नहीं रहा। यह भी हो सकता है कि gitमानक विंडोज सम्मेलन से ड्राइव अक्षरों को अलग तरीके से व्याख्या करता है। क्या आपने `Z:` की कोशिश की?
intuited

इर्र ... जिसे पढ़ना चाहिए था "क्या आपने` जेड: \ `?" की कोशिश की। ठीक है, सही भागने के अलावा तो कोड-मोड सक्षम हो जाता है .. #nrrr .. मुझे लगता है, वैसे भी नहीं।
intuited

3

यह निश्चित नहीं है कि यह मेरे git संस्करण (1.7.2) या क्या के कारण था, लेकिन मशीन नाम और IP विकल्पों का उपयोग करके ऊपर सूचीबद्ध दृष्टिकोण मेरे लिए काम नहीं कर रहे थे। एक अतिरिक्त विवरण जो महत्वपूर्ण हो सकता है / नहीं हो सकता है कि रेपो एक नंगा रेपो था जिसे मैंने एक अलग मशीन से शुरू किया था और धकेल दिया था।

मैं जैसे निर्देश के साथ ऊपर की सलाह के अनुसार project1 क्लोन करने की कोशिश कर रहा था:

$ git clone file:////<IP_ADDRESS>/home/user/git/project1
Cloning into project1...
fatal: '//<IP_ADDRESS>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

तथा

$ git clone file:////<MACHINE_NAME>/home/user/git/project1
Cloning into project1...
fatal: '//<MACHINE_NAME>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

क्या किया था मेरे लिए काम सरल कुछ था:

$ git clone ../git/project1
Cloning into project1...
done.

नोट - भले ही रेपो से क्लोन किया गया था, यह नंगे था, इसने सभी वास्तविक कोड / छवि / संसाधन फ़ाइलों के साथ एक 'सामान्य' क्लोन का उत्पादन किया, जिसकी मैं उम्मीद कर रहा था (जैसा कि गिट रेपो के आंतरिक के विपरीत)।


1

या तो पूर्ण पथ या सापेक्ष पथ दर्ज करें।

उदाहरण के लिए नीचे वाला पहला पथ निरपेक्ष पथ का उपयोग करता है:

(यह उस फ़ोल्डर के अंदर से होता है जिसमें भंडार और बैकअप सबफ़ोल्डर के रूप में होते हैं। यह भी याद रखें कि बैकअप फ़ोल्डर को संशोधित नहीं किया गया है यदि इसमें पहले से ही कुछ भी है। और यदि यह मौजूद नहीं है, तो एक नया फ़ोल्डर बनाया जाएगा)

~/git$ git clone --no-hardlinks ~/git/git_test1/   ~/git/bkp_repos/

निम्नलिखित रिश्तेदार पथ का उपयोग करता है:

~/git$ git clone --no-hardlinks git_test1/   bkp_repos2/

0

जबकि UNC पथ Git 2.21 (फरवरी 2019, नीचे देखें) से समर्थित है, Git 2.24 (Q4 2018) अनुमति देगा

git clone file://192.168.10.51/code

और नहीं file:////xxx, ' file://' UNC पथ साझा करने के लिए पर्याप्त है।
" UNC के साथ गेट फ़ेट त्रुटि " देखें ।


ध्यान दें, 2016 के बाद से और मिंग -64 विंडोज के लिए गिट केgit.exe साथ पैक किया गया है , एक यूएनसी पथ समर्थित है। (देखें " एक दूसरे से संबंधित msys, msys2 और MinGW-64 कैसे हैं? "

और Git 2.21 (फरवरी 2019) के साथ, यह समर्थन एक msys2 शेल (UNC पथ के आसपास उद्धरण के साथ) में भी फैला हुआ है ।

देखें प्रतिबद्ध 9e9da23 , प्रतिबद्ध 5440df4 से (17 जनवरी 2019) जोहानिस Schindelin ( dscho)
मदद के द्वारा: किम Gybels ( Jeff-G)
( जूनियो सी gitsterहमानो द्वारा विलय - - in f5dd919 , 05 फरवरी 2019)

Git 2.21 से पहले, Git के स्पॉन में विधि के कारण एक क्विक के कारण, git-upload-packबैकस्लैश के साथ पथ पास करने में समस्या होती है: Git शेल के माध्यम से कमांड-लाइन को बाध्य करेगा, जिसमें Git for Windows (MSYS2 होने के नाते) में अलग-अलग उद्धरण अर्थ हैं। नियमित रूप से Win32 निष्पादनयोग्य जैसे प्रोग्राम) git.exe

लक्षण है कि फार्म के UNC पथ में दो बैकस्लैश का पहला है \\myserver\folder\repository.gitहै बंद छीन लिया

यह अब कम हो गया है:

mingw: विशेष-केस के तर्क sh

MSYS2 रनटाइम कमांड-लाइन वाइल्डकार्ड विस्तार और डी-कोटिंग का अनुकरण करने के लिए अपना सर्वश्रेष्ठ प्रयास करता है, जो यूनिक्स सिस्टम पर यूनिक्स शेल को कॉल करके किया जाएगा।

उन यूनिक्स शेल नियमों का हवाला देते हुए विंडोज के cmd और पॉवर्सशेल पर लागू होने वाले कोटिंग नियमों से भिन्न हैं, जो अन्य प्रक्रियाओं को पैदा करते समय कमांड-लाइन मापदंडों को ठीक से उद्धृत करने के लिए थोड़ा अजीब है।

विशेष रूप से, git.exeउपप्रकारों को तर्क देते हैं जो वाइल्डकार्ड के रूप में व्याख्या करने के लिए अभिप्रेत नहीं हैं , और यदि उनमें बैकस्लैश हैं, तो उन्हें बचने के पात्रों के रूप में व्याख्या नहीं की जा सकती है, जैसे विंडोज पथ से गुजरते समय।

नोट: यह केवल एक समस्या है जब MSYS2 निष्पादनयोग्य को कॉल किया जाता है, न कि जब GING.exe जैसे MINGW निष्पादनयोग्य को कॉल किया जाता है। हालाँकि, हम MSYS2 निष्पादन योग्य को अक्सर कॉल करते हैं, विशेष रूप से जब use_shellबच्चे_प्रोसेस संरचना में झंडा सेट करते हैं ।

यह निर्धारित करने का कोई सुरुचिपूर्ण तरीका नहीं है कि .exeनिष्पादित की जाने वाली फ़ाइल MSYS2 प्रोग्राम है या MINGW एक।
लेकिन चूंकि शेल के माध्यम से कमांड लाइन पास करने का उपयोग मामला बहुत प्रचलित है, इसलिए हमें निष्पादित करते समय कम से कम इस मुद्दे पर काम करने की आवश्यकता है sh.exe

आइए एक बदसूरत, कठिन-कोडित परीक्षण पेश करें कि क्या argv[0]" sh" है, और क्या यह MSYS2 बैश को संदर्भित करता है, यह निर्धारित करने के लिए कि क्या हमें सामान्य से भिन्न तर्क उद्धृत करने की आवश्यकता है।

यह अभी भी पूरी तरह से मुद्दे को ठीक नहीं करता है, लेकिन कम से कम यह कुछ है।

संयोग से, यह उस समस्या को भी ठीक करता है जहां प्रक्रिया git clone \\server\repoको रास्ता सौंपने के दौरान बैकस्लैश को गलत तरीके से संभालने के कारण विफल रहा git-upload-pack

इसके अलावा, हमें केवल व्हाट्सएप और बैकस्लैश को उद्धृत करने के लिए ध्यान देने की आवश्यकता है, बल्कि घुंघराले कोष्ठक भी।
जैसा कि उपनाम अक्सर MSYS2 बैश के माध्यम से जाता है, और जैसा कि उपनाम अक्सर पैरामीटर प्राप्त करते हैं जैसे कि HEAD@{yesterday}, यह वास्तव में महत्वपूर्ण है।

देख t/t5580-clone-push-unc.sh


0

क्लोन के बाद, मेरे लिए पुश काम नहीं कर रहा था।

सॉल्यूशन: जहां रेपो को ओपन .it फोल्डर और कॉन्फिग फाइल में क्लोन किया जाता है।

दूरस्थ मूल url सेट मान के लिए:

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.