ssh के माध्यम से git क्लोन


233

मेरे पास एक परियोजना है जिस पर मैंने एक गिट रिपॉजिटरी बनाई:

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

मैं दूसरी मशीन पर नंगे क्लोन बनाना चाहता था:

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

मैंने क्लोन तैयार किया लेकिन कोई जवाब नहीं दिया। मैंने सर्वर मशीन पर लॉग ऑन किया और यह देखने की कोशिश की कि फाइलें कैसे संग्रहीत की जाती हैं। पथ / GitRepos खाली था, इसलिए मैंने फिर से क्लोन करने का फैसला किया:

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

इस बार जवाब था:

घातक: गंतव्य पथ 'ssh: // उपयोगकर्ता @ सर्वर: /GitRepos/myproject.git' पहले से मौजूद है और एक खाली निर्देशिका नहीं है।

लेकिन मैंने देखा कि रास्ता खाली था।
यहाँ क्या चल रहा है ?


मुझे नहीं लगता कि दौड़ना git clone --bareवह करेगा जो आपको लगता है कि यह करेगा।
वोल्फ

3
मेरे लिए, ssh: // ने रिमोट प्रोटोकॉल का उपयोग करने के बजाय एक फ़ोल्डर बनाया। @ Alec-the-geek के उत्तर का उपयोग करके काम करने के लिए चीजें मिलीं। क्या आप इसके लिए एक पसंदीदा उत्तर का चयन करने का मन बनाएंगे - यह आपका काम है।
एकुप्पी

1
@akauppi: सभी जवाबों पर विचार करना ओपी की ज़िम्मेदारी है, लेकिन जब तक वे संतुष्ट नहीं होते हैं, तब तक जवाब देने का कोई दायित्व नहीं है। (बेशक, यह उन्हें याद दिलाने के लिए चोट नहीं करता है या यह पूछने के लिए कि उन्हें आगे स्वीकार्य होने के लिए उन्हें और क्या जानकारी चाहिए!)
jvriesem

@jvriesem बेशक। अब "यह आपका काम है" को हटा देगा। लेकिन यह एक पुरानी बात है ... :)
akauppi

जवाबों:


219

यह संभवतः प्रश्न से सीधे असंबंधित है; लेकिन एक गलती जो मैंने अभी खुद की है, और मैं ओपी में देखता हूं, वह URL विनिर्देश है ssh://user@server:/GitRepos/myproject.git- अर्थात्, आपके पास एक बृहदान्त्र है :, और एक /निरपेक्ष पथ को इंगित करने के बाद आगे स्लैश ।

मुझे तब Git क्लोन मिला , ssh: होस्टनाम हल नहीं कर सका - git, development - निकोलस कुटलर (जैसा कि मुझे त्रुटि मिल रही थी, gitसंस्करण 1.7.9.5 पर था ), नोटिंग:

शुरू में मैंने जो कमांड इस्तेमाल किया था, उसके साथ समस्या यह थी कि मैंने एक scp जैसी सिंटैक्स का उपयोग करने की कोशिश की।

... जो मेरी समस्या भी थी! तो मूल रूप से gitसाथ में ssh, आप या तो उपयोग करते हैं

  • ssh://username@host.xz/absolute/path/to/repo.git/ - सर्वर पर निरपेक्ष पथ के लिए सिर्फ एक फॉरवर्ड स्लैश
  • username@host.xz:relative/path/to/repo.git/- बस एक बृहदान्त्र (यह ssh://सर्वर पर रिश्तेदार पथ के लिए नहीं होना चाहिए ( usernameसर्वर मशीन पर घर dir के सापेक्ष )

आशा है कि यह किसी की मदद करता है,
चीयर्स!


84
यह काम नहीं करता है। यदि आप ssh के साथ एक सापेक्ष पथ निर्दिष्ट करना चाहते हैं, तो आपको ssh://उपसर्ग खोना होगा । मैंने अभी 20 मिनट बिताए हैं, यह पता लगाने की कोशिश कर रहा हूं। git clone username@host.xz:relative/path/to/repo.git/कार्य करना चाहिए।
बोब्बालुबा

2
यह एक डेबियन 8. पर जीआईटी 2.1.4 के साथ कोशिश की। या तो sugestions काम नहीं करते। पहले प्रयास में / GitRepos के तहत कोई निर्देशिका नहीं बनाई गई थी, और दूसरे प्रयास में शिकायत की गई कि मार्ग पहले से मौजूद है। ठीक उसी तरह जैसे मूल समस्या की सूचना दी गई थी
dlsa

5
आपकी टिप्पणी @bobbaluba (और अपडेट किए गए उत्तर) के कारण, मुझे इस पर 20 मिनट भी खर्च नहीं करना पड़ा। धन्यवाद!
ओलाफोर

143

GitHub पर रिपॉजिटरी के लिए, कोशिश करें:

git clone ssh://git@github.com/<user>/<repository name>.git

Ssh के माध्यम से क्लोन को स्थापित करने के लिए देखें:


क्या <user> github में मेरा उपयोगकर्ता नाम या github के लिए मेरा ईमेल पता है? इस लिंक को फिर से लिखें मुझे सार्वजनिक कुंजी पीढ़ी के दौरान ईमेल पते का उपयोग करने का सुझाव देता है। help.github.com/en/github/authenticating-to-github/… कोशिश करने के बाद (ssh कुंजी जीन के लिए खाली पासफ़्रेज़), मैं अभी भी गितुब से रेपो क्लोन नहीं कर सका। ps मैंने एजेंट के लिए कुंजी नहीं जोड़ी।
मिन्नी

gitlab के लिए भी यही काम करता है। इससे पहले, हमें SSH कुंजी सेटअप को सक्षम करने की आवश्यकता है, जैसा कि आपने सुझाव दिया है
वेंकटरमन आर

45

आपको सर्वर को कॉल करने पर क्लोन कमांड चलाने की आवश्यकता है। लेकिन मैं शर्त लगाता हूं कि आप अपने स्थानीय क्लाइंट पर एक ssh सर्वर नहीं चला रहे हैं ताकि किसी भी तरह से काम न करें। सुझाव है कि आप इस दृष्टिकोण का पालन करें (मैनुअल 'कारण की जाँच कर रहा हूँ जो मैं स्मृति से कर रहा हूँ)

  1. सर्वर मशीन में लॉग इन करें।
  2. एक नंगे रेपो का उपयोग कर बनाएँ git init --bare
  3. क्लाइंट मशीन पर आप अपने रेपो को सर्वर पर धकेल सकते हैं। git remote add origin ssh://user@server:/GitRepos/myproject.gitके बादgit push origin master

अच्छी सलाह! नए लोगों के लिए कुछ नोट (मेरे जैसे) जो पहले शुद्ध-सर्वर-जीआईटी-फ़ोल्डर्स से नहीं निपटे हैं: 2. सीडी / गिट्रिपोस; mkdir myproject.git; cd myproject.it git init से पहले --bare। आपको यहां एक काम की प्रति नहीं मिलेगी - रेपो फाइलें और फ़ोल्डर्स (सामान्य रूप से .it में) आपके लिए नंगे होंगे, इस प्रकार ध्वज का नाम। धन्यवाद
akauppi

2
"git init --bare" एक .it निर्देशिका नहीं बनाता है। यह फाइलों को सीधे फोल्डर पर रख देता है। दूरस्थ मूल को जोड़ते समय मुझे प्राप्त होता है: "" घातक: नहीं git रिपॉजिटरी (या आरोह बिंदु / घर तक कोई भी माता-पिता) फाइलसिस्टम सीमा पर रोकना (GIT_DISCOVERY_ACROSS_FILESCSTEMFER)।
dlsa

10

अस्वीकरण: यह भविष्य के आगंतुकों के लिए अधिक दृश्यमान बनाये गये बोब्बालुबा की टिप्पणी की एक प्रति मात्र है । इसने मुझे किसी अन्य उत्तर की तुलना में अधिक मदद की।


आपको उदाहरण के रूप में ssh://उपयोग करते समय उपसर्ग को छोड़ना होगाgit clone

git clone git@github.com:owner/repo.git

5

इसे इस्तेमाल करे।

चरण 1:

ls -al ~/.ssh

यहां छवि विवरण दर्ज करें

चरण 2:

ssh-keygen 

(डिफ़ॉल्ट मान के लिए Enter कुंजी का उपयोग करके) यहां छवि विवरण दर्ज करें चरण 3: कॉन्फ़िगर फ़ाइल को सेटअप करने के लिए

vim /c/Users/Willie/.ssh/config

होस्ट gitlab.com HostName
gitlab.com
उपयोगकर्ता git
IdentityFile ~ / .ssh / id_rsa

चरण 4:

git clone git@gitlab.com:<username>/test2.git

यहां छवि विवरण दर्ज करें

चरण 5:
जब आप चरण 4 समाप्त कर
लेते हैं। तो test2.git फ़ाइल डाउनलोड हो जाएगी। 2. आपको
नई फ़ाइल (ज्ञात_होस्ट) ~ / .ssh में मिल जाएगी।
यहां छवि विवरण दर्ज करें

PS: मैं id_rsa और id_rsa.ub को meself द्वारा बनाता हूं और मैं इसे Gitlab सर्वर पर वितरित करता हूं। किसी भी क्लाइंट-साइड (विंडोज़ और लिनक्स) में दोनों कुंजियों का उपयोग करना।


4

Git 101:

gitएक विकेन्द्रीकृत संस्करण नियंत्रण प्रणाली है। Git के साथ उठने और चलने के लिए आपको एक सर्वर की आवश्यकता नहीं है। फिर भी आप ऐसा करना चाह सकते हैं, क्योंकि यह अच्छा लग रहा है, है ना? (यदि आप एक से अधिक कंप्यूटर पर एक ही प्रोजेक्ट पर काम करना चाहते हैं तो भी यह उपयोगी है।)

तो एक "सर्वर" प्राप्त करने के लिए आपको चलाने की ज़रूरत है git init --bare <your_project>.gitक्योंकि यह एक खाली रिपॉजिटरी बनाएगा, जिसे आप अपनी मशीनों पर आयात कर सकते हैं, बिना आपके फाइल में विन्यास फाइल के आसपास.git डीआईआर ।

इसके बाद आप अपने ग्राहकों पर रेपो को क्लोन कर सकते हैं क्योंकि यह काम करने वाला है, लेकिन मैंने पाया कि कुछ क्लाइंट (अर्थात् git-gui) एक रेपो का क्लोन बनाने में विफल होंगे जो पूरी तरह से खाली है। इसके आसपास काम करने के लिए आपको दौड़ने की जरूरत हैcd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master । (ध्यान दें कि यदि आपने अतीत में ऐसा नहीं किया था, तो आपको उस मशीन के गिट के लिए अपना उपयोगकर्ता नाम और ईमेल कॉन्फ़िगर करने की आवश्यकता हो सकती है। चलाने के लिए वास्तविक कमांड आपको मिलने वाले त्रुटि संदेश में होंगे इसलिए मैं उन्हें छोड़ दूँगा।

तो इस बिंदु पर आप बस चलाकर रिपॉजिटरी को किसी भी मशीन पर क्लोन कर सकते हैं git clone <user>@<server>:<relative_path><your_project>.git। (जैसा कि अन्य लोगों ने बताया है कि ssh://यदि आप पूर्ण पथ का उपयोग करते हैं, तो आपको इसके साथ उपसर्ग करने की आवश्यकता हो सकती है ।) यह मानता है कि आप पहले से ही अपने क्लाइंट से सर्वर में लॉग इन कर सकते हैं। (आपको एक कॉन्फिग फ़ाइल और कुंजी सेट करने के लिए बोनस अंक भी मिलेंगेssh यदि आप दूरस्थ सर्वर पर बहुत सारे सामान धकेलने का इरादा रखते हैं, तो आपको ।)

कुछ प्रासंगिक लिंक:
यह बहुत कुछ आपको बताता है कि आपको क्या जानना चाहिए।
और यह उन लोगों के लिए है जो गिट के बुनियादी कामकाज को जानते हैं लेकिन कभी-कभी सटीक वाक्य रचना को भूल जाते हैं।


वे दोनों अब लिंक मृत प्रतीत होते हैं या नहीं दिखाते हैं कि आपने उनसे क्या अपेक्षा की थी।
टोड

2

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

मैं अविश्वसनीय रूप से विशिष्ट आदेश दे रहा हूं। कहने के बजाय <your folder>कहूंगा /root/git। एकमात्र स्थान जहां मैं मूल कमांड बदल रहा हूं, अपने विशिष्ट सर्वर नाम की जगह ले रहा है example.com। मैं समझाऊंगा फ़ोल्डर्स उद्देश्य तो आप इसे तदनुसार समायोजित कर सकते हैं। कृपया मुझे किसी भी भ्रम की जानकारी दें और मैं उत्तर को अपडेट कर दूंगा।

सर्वर पर git संस्करण 1.7.1 है। सर्वर CentOS 6.3 (फाइनल) है।

विकास मशीन पर गिट संस्करण 1.8.1.1 है। यह मैक ओएस एक्स 10.8.4 है।

केंद्रीय रिपॉजिटरी और उत्पादन मशीन एक ही मशीन पर हैं।

केंद्रीय रिपॉजिटरी, जिसे svn उपयोगकर्ता 'सर्वर' से संबंधित कर सकते हैं, निम्नानुसार कॉन्फ़िगर किया गया है। मेरे पास एक फ़ोल्डर है /root/gitजहां मैं अपने सभी गिट रिपॉजिटरी रखता हूं। मैं एक परियोजना के लिए गिट रिपोजिटरी बनाना चाहता हूं जिसे मैं 'फूल' कहता हूं।

cd /root/git
git clone --bare flowers flowers.git

Git कमांड ने दो संदेश दिए:

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

किसी बारे में चिन्ता की जरूरत नहीं।

विकास मशीन पर निम्नानुसार कॉन्फ़िगर किया गया है। मेरे पास एक फ़ोल्डर है /home/kinjal/Sitesजहाँ मैंने अपनी सभी परियोजनाएँ रखी हैं। मैं अब सेंट्रल गिट रिपॉजिटरी प्राप्त करना चाहता हूं।

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git

यह मुझे उस बिंदु पर ले जाता है जहां मैं इसमें सामान जोड़ना शुरू कर सकता हूं। मैंने सबसे पहले git flow की स्थापना की

git flow init -d

डिफ़ॉल्ट रूप से यह शाखा पर है develop। मैं अब यहाँ अपना कोड जोड़ता हूँ। फिर मुझे केंद्रीय गिट भंडार के लिए प्रतिबद्ध होना चाहिए।

git add .
git commit -am 'initial'
git push

इस बिंदु पर इसे विकसित शाखा में धकेल दिया गया। मैं इसे मास्टर शाखा में भी जोड़ना चाहता हूं।

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git push

ध्यान दें कि मैंने रिलीज की शुरुआत और रिलीज के बीच कुछ भी नहीं किया। और जब मैंने रिलीज़ खत्म किया तो मुझे दो फ़ाइलों को संपादित करने के लिए कहा गया। इसने विकास शाखा को गुरु की ओर धकेल दिया।

उत्पादन स्थल पर, जो मेरे केंद्रीय गिट भंडार के रूप में एक ही मशीन पर है, मैं भंडार को अंदर रखना चाहता हूं /var/www/vhosts/example.net। मेरे पास पहले से है /var/www/vhosts

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

यदि उत्पादन मशीन भी एक अलग मशीन पर होगी, तो git cloneकमांड विकास मशीन पर इस्तेमाल होने वाले की तरह दिखेगा।


1

अपफ्रंट, मुझे अपने GIT कौशल में थोड़ी कमी है।

यह आपकी मशीन पर एक नंगे भंडार को क्लोन करने वाला है, जिसमें केवल वे फ़ोल्डर होते हैं .gitजिनके भीतर एक छिपी हुई निर्देशिका होती है। निष्पादित करें ls -alऔर आपको देखना चाहिए .gitयाcd .git अपने भंडार अंदर ।

क्या आप अपने इरादे का विवरण जोड़ सकते हैं ताकि अधिक जीआईटी कौशल वाला कोई व्यक्ति मदद कर सके? यह क्या है जो आप वास्तव में नहीं करना चाहते हैं कि आप इसे करने की योजना कैसे बनाते हैं?


मैंने आदेश की गलत व्याख्या की। मैंने जो कुछ किया वह वर्तमान निर्देशिका के तहत एक उपनिर्देशिका वृक्ष ssh: /myproject.git बना रहा था। मुझे लगा कि मैं एक दूरस्थ निर्देशिका के लिए क्लोनिंग कर रहा हूं, लेकिन वास्तव में कमांड जो करता है वह एक रिपॉजिटरी से क्लोन होता है।
dlsa

0

मैंने किया था: git clone --bare "/ GITREPOSITORIES / RepoA" "ssh: // luc @ EERSTENASDS119J / volume1 / RepoA" परिणाम: घातक: गंतव्य पथ ssh: // luc @ EERSTENASDS119J / volume1 / RepoA 'पहले से ही मौजूद है और मौजूद है। खाली निर्देशिका नहीं।

सिस्टम ने मेरे वर्तमान पथ में एक निर्देशिका ssh: // luc @ EERSTENASDS119J / माप 1 / रेपो बनाया।

इसलिए git क्लोन ने URL विनिर्देश की व्याख्या नहीं की। एलेक के वर्कअराउंड का उपयोग किया।


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