वर्तमान निर्देशिका में क्लोन करने के लिए Git कैसे प्राप्त करें


499

मैं कर रहा हूँ:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./

मैं ला रहा हूँ:

घातक: गंतव्य पथ '।' पहले से मौजूद है और एक खाली निर्देशिका नहीं है।

मुझे पता है रास्ता। पहले से ही मौजूद है। और मैं आश्वासन दे सकता हूं कि निर्देशिका खाली है। (मैं अंदर ls करता हूँ और मुझे कुछ भी नहीं दिखता है!)

उस परियोजना को वर्तमान निर्देशिका में क्लोन करने के लिए मैं यहां क्या याद कर रहा हूं?


16
यदि आप ls -aएक .gitनिर्देशिका करते हैं?
डेविन ट्राटन

2
@dtryon - नहीं, लेकिन मुझे एक DS_Store दिखाई देता है जो भी यह है। शायद मुझे इससे छुटकारा चाहिए। उस के लिए धन्यवाद -a: s
मेम

@ धन्यवाद आपके चार त्वरित उत्तर। जेम्स मैक्लाघ्लिन जो एक सुंदर आदेश लगता है यह सुनिश्चित करने के लिए कि हम एक खाली निर्देशिका का क्लोन बनाते हैं। :)
मेम

1
मैं मान रहा हूँ तो आप एक मैक पर हैं । क्या यह मदद करता है: stackoverflow.com/questions/107701/…
डेविन ट्रेटन

इसके लायक यह है कि, मैक पर ब्राउज करने वाले किसी भी फोल्डर में ये छोटी फाइलें होंगी। यह उन दोनों विंडोज उपयोगकर्ताओं के लिए बहुत कष्टप्रद है, जो एक ही शेयर का उपयोग कर रहे हैं, और किसी भी सिस्टम (जैसे git) के लिए जो फ़ोल्डर को खाली करने की आवश्यकता है या एक फ़ोल्डर में प्रत्येक फ़ाइल पर प्रोग्रामेटिक रूप से कार्य करता है।
jsims281 10

जवाबों:


508

बस इसके आगे एक डॉट लगा दें

git clone git@github.com:user/my-project.git .

से git help clone:

मौजूदा निर्देशिका में क्लोनिंग की अनुमति केवल तभी दी जाती है जब निर्देशिका खाली हो।

इसलिए सुनिश्चित करें कि निर्देशिका खाली है (साथ जांचें ls -a), अन्यथा कमांड विफल हो जाएगी।


18
सहमत हुए, ध्यान दें कि एक मैक पर, एक .DS_Store फ़ाइल ऑटो जिसे खोजक द्वारा बनाया गया है, क्लोन को ब्लॉक कर देगा। के साथ जाँच करेंls -la
ptim

281
नहीं। यह सही उत्तर नहीं है। यह अभी भी "घातक: गंतव्य पथ 'लौटेगा।' पहले से मौजूद है और एक खाली निर्देशिका नहीं है। "
सरस्वती

16
मेरे लिए git v1.8.3.2 का उपयोग कर काम करता है। @SidSarasvati क्या आप सुनिश्चित हैं कि वर्तमान निर्देशिका खाली है ?
वेस्ले बॉफ

3
मेरे लिए @SidSarasvati अच्छी तरह से निर्देशन खाली नहीं है, लेकिन मुझे इस बात की परवाह नहीं है कि मुझे यकीन नहीं है कि Git क्यों होगा। एक गैर-खाली निर्देशिका में क्लोन क्यों नहीं कर सकते? निश्चित रूप से कार्यात्मक यह सिर्फ एक बुनियादी डाउनलोड है।
नाथन हॉर्बी

3
mkdirडिफ़ॉल्ट रूप से हार्डलिंक बनाता है .और ..यूनिक्स-आधारित सिस्टम में तकनीकी रूप से "खाली" एक नई निर्देशिका है? मेरा मतलब है, मुझे लगता है कि आप कर सकते थे unlink .और unlink ..लेकिन यह है कि आप बड़ी समस्याओं के कारण हो सकता है अगर आप बाद में क्लोनिंग के बाद फिर से फिर से लिंक करने के लिए भूल जाते हैं ....
SeldomNeedy

351

निम्नलिखित शायद सभी मामलों में एक क्लोन के बराबर नहीं है, लेकिन मेरे लिए चाल है:

git init .
git remote add -t \* -f origin <repository-url>
git checkout master

मेरे मामले में, यह एक .git/configफ़ाइल का उत्पादन करता है जो क्लोन करते समय मुझे प्राप्त होने वाले के बराबर है।


40
इसके अलावा, यह वह झुकाव है जो वर्तमान सामग्री को बने रहने की अनुमति देता है - यदि आपका डॉटफ़ाइल्स आपके होम निर्देशिका में क्लोन करता है।
रैलबामी

7
इसके साथ मुझे अंतत: जो भी मुझे पसंद है उसे बिना किसी बच्चे की तरह मुझे समझे बिना फ़ोल्डर में क्लोन करने की अनुमति है। जब मैंने एक अस्थायी .gitignore भी जोड़ा था *(सब कुछ अनदेखा) मैं तब git checkout masterभी प्रदर्शन कर सकता था, जब फ़ोल्डर में कुछ अन्य फाइलें पहले से ही थीं। तब रिपॉजिटरी की सभी कम्‍प्‍युटेड फाइल्‍स का क्लोन तैयार किया गया था (और अस्थायी। टाइगरिनोर को रेपो से उचित। टाइगरिनोर द्वारा अधिलेखित किया गया था)। यह सब अद्भुत ढंग से काम किया। यह इस तरह से स्वयं git clone -fया कुछ का उपयोग करके होना चाहिए ।
पॉलमैग

1
यदि आपके पास ऐसी फाइलें हैं जो अलग / नई / बदली हुई हैं, जो कि ऊपर लिखी जाएंगी ... (चेकआउट से फाइलें ओवरराइट हो जाएंगी ... गर्भपात) का उपयोग करें: git चेकआउट मास्टर -f
Visualex

3
यह -t \*अनावश्यक है क्योंकि यह डिफ़ॉल्ट है।
पलेक

1
git remote set-head origin -aकाम आ सकता है। यह मूल डिफ़ॉल्ट शाखा ( refs/remotes/origin/HEAD) सेट करता है क्योंकि यह दूरस्थ रिपॉजिटरी में सेट है। git cloneइसके विपरीत, स्वचालित रूप से करता है git remote add -f
पालेक

211

@Andrew ने यहाँ इसका स्पष्ट उत्तर दिया है । लेकिन यह भी उतना ही सरल है जब निर्देशिका खाली न हो तो भी यह काम करता है:

git init .
git remote add origin <repository-url>
git pull origin master

मुझे <repository-url>यह पुष्टि करते हुए खुशी हो रही है कि यह एक स्थानीय रेपो भी हो सकता हैgit remote add origin /path/to/existing/repo
क्रुबो

60

यह सुनिश्चित करने के लिए कि आप रेपो को क्लोन कर सकते हैं, किसी भी अस्थायी निर्देशिका में जाएं और वहां प्रोजेक्ट को क्लोन करें:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git

यह आपके सामान को एक project_hubडायरेक्टरी में क्लोन कर देगा ।

एक बार क्लोनिंग समाप्त हो जाने के बाद, आप जहां चाहें इस निर्देशिका को स्थानांतरित कर सकते हैं:

mv project_hub /path/to/new/location

यह सुरक्षित है और इसके आसपास किसी जादुई सामान की आवश्यकता नहीं है।


9
यह पहले से मौजूद /path/to/new/locationनिर्देशिका में एक उपनिर्देशिका बनाएगा जो निश्चित रूप से सवाल का बिंदु नहीं है।
पावेल Paमेरदा

फिर आपको छिपी हुई फ़ाइलों को मैन्युअल रूप से स्थानांतरित करना होगा या जटिल कमांड का उपयोग करना होगा ... और यह प्रश्न का उत्तर नहीं देता है।
ब्लैक


48

करना

git clone https://user@bitbucket.org/user/projectname.git .

निर्देशिका खाली होनी चाहिए


16

हम्म ... $(pwd)मेरे लिए काम करने वाले निरपेक्ष वर्तमान पथ को निर्दिष्ट करना।

git clone https://github.com/me/myproject.git $(pwd)

git संस्करण: 2.21.0


13

यदि वर्तमान निर्देशिका खाली है, तो यह काम करेगा:

git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo

1
मेरे मामले में, इसने कुछ फाइलों के साथ भी काम किया। ' निर्देशिका
OSDave

2
ध्यान दें कि किसी भी dotfiles निर्देशिका में foo के तहत, उदा। foo / bar / .foobar को इस कमांड के साथ नहीं ले जाया जाएगा। से @phatblat जवाब देखें
ली

11

उपयोग करने से पहले @ StephaneDelcroix के उत्तर के अलावा:

git clone git@github.com.user/my-project.git .

सुनिश्चित करें कि उपयोग करके आपका वर्तमान डायर खाली है

ls -a

आज इस समस्या का सामना किया। यह पता चला है कि मैं .गित और .gitignore फ़ोल्डर्स को निर्देशिका में छिपा रहा था जिसे मैं रिपॉजिटरी को क्लोन करने की कोशिश कर रहा था। जब मैंने इन फ़ोल्डरों को हटाया तो सब कुछ ठीक था।
तमारा

वर्तमान dir को खाली करने के लिए क्या होगा? मुझे लगता है कि यह सिर्फ इसे जाँचने से ज्यादा उपयोगी होगा :)
pie6k

9

समाधान: इस मामले पर, समाधान का उपयोग कर रहा था dot, इसलिए:rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .

rm -rf .* && यदि हम पूरी तरह से सुनिश्चित हैं कि निर्देशिका खाली है तो छोड़ा जा सकता है।

क्रेडिट्स नीचे जाएं: @James McLaughlin नीचे की टिप्पणियों पर।


10
यह बुरा लग रहा है, क्योंकि * मूल निर्देशिका शामिल है! मुझे: ~ / tmp / tmp / tmp $ ls -d .* . .. me: ~ / tmp / tmp / tmp $
stackunderflow

यह मदद नहीं करता है, क्योंकि मुझे उस निर्देशिका में निर्भरता है जहां मुझे चेकआउट करने की आवश्यकता है।
b01

18
मुझे यकीन नहीं है कि कुछ वास्तविक चेतावनी चेतावनी के बिना rm -rf (किसी भी रूप में) को SO उत्तर में लिखना बुद्धिमान नहीं है। कुछ अनुभवहीन उपयोगकर्ता "ग्रीन चेक मार्क" (आमतौर पर सबसे अच्छा जवाब) की तलाश में यहां आ सकते हैं, फिर इस कमांड और पूफ को कॉपी-पेस्ट करते हैं ... वर्तमान निर्देशिका में उनकी कड़ी मेहनत है। BTW: rm -rf ./.*"सुरक्षित" है यदि आप वर्तमान dir के तहत छिपी (डॉट) फ़ाइलों और निर्देशिकाओं को हटा रहे हैं (जैसा कि @stackunderflow मेरे सामने कहा गया है)। लेकिन rm -rfअनुभवहीन उपयोगकर्ताओं के लिए एक खतरनाक आदेश है इसलिए इसके साथ सावधान रहें! बस मेरे 2 सेंट।
एंड्रयू

1.7.1 पर काम करता है केवल फ़ोल्डर के अंदर था .gitके बाद git init(मैं यह जानता था)
vladkras

आपको -rfसामान्य फ़ाइलों को हटाने की आवश्यकता नहीं है । कृपया इस उत्तर को हटाने या कम से कम किसी भिन्न को स्वीकार करने पर विचार करें।
नवीन

6

@ GoZoner के उत्तर पर सुधार:

git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo

Shopt कमांड को इस SO उत्तर से लिया जाता है और Bash पर 'mv' कमांड के व्यवहार को dotfiles शामिल करने के लिए बदलता है, जिसे आपको .git निर्देशिका और अन्य छिपी हुई फ़ाइलों को शामिल करने की आवश्यकता होगी।

यह भी ध्यान दें कि यह केवल काम करने की गारंटी है-यदि वर्तमान निर्देशिका (।) खाली है, लेकिन यह तब तक काम करेगा जब तक कि क्लोन किए गए रेपो की कोई भी फ़ाइल वर्तमान निर्देशिका में फ़ाइलों के समान नाम न हो। यदि आपको परवाह नहीं है कि वर्तमान निर्देशिका में क्या है, तो आप 'mv' कमांड में -f (बल) विकल्प जोड़ सकते हैं।


6

मेरी भी यही जरूरत थी। मेरे मामले में मेरे पास एक मानक वेब फ़ोल्डर था जो वेब सर्वर इंस्टॉल द्वारा बनाया गया है। इस दृष्टांत के प्रयोजनों के लिए मान लें कि यह है

/server/webroot

और वेबरोट में अन्य मानक फाइलें और फ़ोल्डर्स हैं। मेरे रेपो में सिर्फ साइट विशिष्ट फाइलें हैं (html, जावास्क्रिप्ट, CFML, आदि)

मुझे बस इतना करना था:

cd /server/webroot

git init

git pull [url to my repo.git]

आपको लक्ष्य फ़ोल्डर में गिट इनिट करने के लिए सावधान रहने की आवश्यकता है क्योंकि यदि आप दो चीजों में से एक नहीं करते हैं, तो यह होगा:

  1. Git पुल मेरे मामले में, बिना git फ़ाइल के संदेश के साथ विफल हो जाएगा:

घातक: जीएटी रिपॉजिटरी (या किसी भी मूल निर्देशिका) का नहीं:

  1. वहाँ तो है अपने फ़ोल्डर के माता-पिता रास्ते में एक .git फ़ाइल कहीं आपके खींच लिया रेपो कि माता पिता कि .git फ़ाइल में बनाया जाएगा। यह मेरे साथ हुआ और मैं इससे हैरान था; ;-)

यह मेरे वेबरूट फ़ोल्डर में मौजूद "मानक" फ़ाइलों में से किसी को भी परेशान नहीं करता था, लेकिन मुझे बाद में आने वाले उनके साथ होने वाले अनजाने को रोकने के लिए उन्हें .itignore फ़ाइल में जोड़ने की आवश्यकता थी।

यह एक गैर-खाली निर्देशिका में "क्लोन" करने का एक आसान तरीका लगता है। यदि आप पुल के द्वारा बनाई गई .it और .itignore फाइलें नहीं चाहते हैं, तो उन्हें खींचने के बाद हटा दें।


5

@ Phatblat के उत्तर पर और सुधार :

git clone --no-checkout <repository> tmp \
  && mv tmp/.git . \
  && rmdir tmp \
  && git checkout master

एक लाइनर के रूप में:

git clone --no-checkout <repository> tmp && mv tmp/.git . && rmdir tmp && git checkout master


2
shopt -s dotglob
git clone ssh://user@host.com/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp

3
यह बताने के लिए अधिक जानकारी प्रदान करें कि आपका कोड समस्या को हल क्यों करता है और यह क्या करता है।
मार्टिन

"git क्लोन ... tmp" - उस डायरेक्टरी में / tmp फोल्डर बनाता है जहाँ कमांड निष्पादित होता है और Git रिपॉजिटरी को क्लोन करता है। फिर "एमवी tmp / *।" - पैरेंट फोल्डर (जहाँ पिछली कमांड निष्पादित हो चुकी है) / / tmp फोल्डर से सभी फाइलों को मूव करता है और अंत में "rm -rf tmp" - रिमूव / tmp फोल्डर।
मरिंस्की

1

नीचे की तरह अपने आदेश के अंत में (डॉट) का उपयोग करें

git क्लोन URL


यह मैक पर काम नहीं करता है, यह त्रुटि का कारण बनता है: fatal: destination path '.' already exists and is not an empty directory.
पेड्रो लूज

Mac :: के लिए आपको मूल निर्देशिका के अंतर्गत होना चाहिए और फिर नीचे git क्लोन URL फ़्लॉडरनेम की तरह (डॉट) फ़ोल्डर नाम का उपयोग करें सुनिश्चित करें कि आपका फ़ोल्डर खाली है।
उपेंद्र

0

यहाँ मैं क्या पाया था:

मैंने यह देखा:

fatal: destination path 'CouchPotatoServer' already exists and is not an empty directory.

मेरी खोजों के बीच, मैं इस पर ठोकर खाई:

https://couchpota.to/forum/viewtopic.php?t=3943

क्लिंटन द्वारा प्रविष्टि के लिए देखें। लंबा ... यदि आप यह कोशिश करते हैं (जैसा कि मैंने किया था), तो आपको शायद access deniedप्रतिक्रिया मिल जाएगी , मेरा 1 सुराग था, इसलिए प्रारंभिक त्रुटि (मेरे लिए), वास्तव में गलत रूट के कारण थी मुद्दा।

खिड़कियों में इसके लिए समाधान: सुनिश्चित करें कि आप चलाते हैं cmdया git elevatedफिर चलाते हैं:

git clone https://github.com/RuudBurger/CouchPotatoServer.git

ऊपर मेरा मुद्दा था और बस मेरे लिए काम कर रहा था।


0

के साथ हटाना

rm -rf *

आप मुसीबत या कुछ और त्रुटियों में पड़ सकते हैं।

यदि आपके पास / पथ / से / फ़ोल्डर है, और अंदर सब कुछ निकालना चाहते हैं, लेकिन वह फ़ोल्डर नहीं है, तो बस चलाएं:

rm -rf / path / to / folder / *


0

इसलिए मैंने अपनी रूट डायरेक्टरी में छिपे हुए .गित फ़ोल्डर को हटाकर और फिर 'git क्लोन रेपो' में एक अवधि जोड़कर इस त्रुटि को ठीक किया। मेरे रूट / डिस्ट फ़ोल्डर में। यह एक vue-cli webpack प्रोजेक्ट के संदर्भ में है। तो बाकी सभी जो कह रहे हैं वह सही है, इसका मतलब यह है कि आपके पास उस फ़ोल्डर में या तो पैरेंट ट्रैकिंग है या जिस पर आप पैरेंट फोल्डर में या प्रश्न में फ़ोल्डर के रूट को क्लोन करने की कोशिश कर रहे हैं!


0

इसका समाधान Windowsअन्य फ़ोल्डर में रिपॉजिटरी को क्लोन करना है और फिर कॉपी करके मूल स्थान पर पेस्ट करना है या बस .gitअदृश्य फ़ोल्डर को कॉपी करना है ।


0
git clone ssh://user@host.com/home/user/private/repos/project_hub.git $(pwd)

ध्यान दें कि यह अभी भी प्रश्न में पोस्ट की गई एक ही त्रुटि के परिणामस्वरूप होगा (" घातक: गंतव्य पथ 'हल / पथ / का / pwd' पहले से ही मौजूद है और खाली निर्देशिका नहीं है। ") यदि आप एक गैर-खाली में ऐसा कर रहे हैं। निर्देशिका।
गीनो मेम्पिन


-1

इसके द्वारा एक नई फ़ाइल बनाने के लिए उपयोगी है mkdir filename, फिर कमांड को चलाना git clone xxxxx, यह मेरे कंप्यूटर में काम करता है


-1

.gitदी गई डायरेक्टरी में डायरेक्टरी सहित केवल सामग्री (या मूव) हटाएं ।
Android स्टूडियो जैसे स्वचालित उपकरण Rebuildआपके लिए समस्या का समाधान करेंगे।

अधिक विवरण:
मेरे लिए दिखाई गई त्रुटि jarresolverगिट रेपो
पथ के लिए थी जिसे दिखाया गया हैtemp\jarresolver\

मैंने temp\jarresolver\छिपी .gitनिर्देशिका सहित निर्देशिका की सामग्री को हटा दिया है ।

यह सब, सब काम किया, कोई क्लोनिंग की आवश्यकता है।
जब मैंने किया Rebuild, एंड्रॉइड स्टूडियो ने खुद को बनाया और निर्माण सफल रहा।


-2

मैंने इस प्रश्न को कई बार देखा है - और मैं केवल यह बताना चाहता हूं कि git pullआपकी निर्देशिका के भीतर से यह ट्रिक करेगा।

जब तक मैं यहाँ कुछ याद नहीं कर रहा हूँ - मेरे लिए काम किया।


4
git pullअगर आपके पास कोई रिपॉजिटरी परिभाषित नहीं है, जो कुछ भी नहीं करता है, तो वह कुछ भी नहीं करेगा git clone
हैकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.