मैं अपने नंगे रेपो को कैसे अपडेट करूं?


134

मैंने अपनी रिपॉजिटरी प्रकाशित करने के लिए एक नंगे रेपो का निर्माण किया, लेकिन मैं यह पता नहीं लगा सकता कि मुख्य रिपॉजिटरी की वर्तमान स्थिति के साथ नंगे रेपो को कैसे अपडेट किया जाए।


2
इस उत्तर को देखें: stackoverflow.com/questions/315911/…
केन ब्लूम

जवाबों:


83

यदि आप मुख्य रेपो से सभी ऑब्जेक्ट को डुप्लिकेट करना चाहते हैं, तो मुख्य रेपो के अंदर ऐसा करें:

git push --all <url-of-bare-repo>

वैकल्पिक रूप से, नंगे रेपो के अंदर एक भ्रूण रखें:

git fetch <url-of-main-repo>

आप एक पुल नहीं कर सकते, क्योंकि एक पुल के साथ विलय करना चाहता है HEAD, जिसमें एक नंगे रेपो नहीं है।

आप भविष्य में कुछ टाइपिंग से खुद को बचाने के उपाय के रूप में इन्हें जोड़ सकते हैं:

git remote add <whatever-name> <url-of-other-repo>

तब आप बस कर सकते हैं

git push --all <whatever-name>

या

git fetch <whatever-name>

क्या रेपो आप में कर रहे हैं। तो के आधार पर <whatever-name>है origin, तो आप भी इसे बाहर पूरी तरह छोड़ सकते हैं।

डिस्क्लेमर: मैं कोई गिट गुरु नहीं हूं। अगर मैंने कुछ गलत कहा, तो मैं प्रबुद्ध होना चाहूंगा!

अपडेट: टिप्पणी पढ़ें!


7
जब मैंने git-fetch --allनंगे रिपॉजिटरी के अंदर किया था , तो मैंने उन अपडेट को नहीं देखा था जो मैंने मुख्य रेपो में किए थे, लेकिन जब git push --all <url-of-bare-repo>मैं अपडेट को देखता हूं तो मैं उन्हें मुख्य रेपो से धक्का देता हूं git log। संभवतः इसके लिए एक सरल व्याख्या है - क्या कोई समझा सकता है?
ph7979

2
@ थोमस - हाँ, "नहीं देखा" से मेरा मतलब git logहै कि ये अपडेट नंगे रेपो में नहीं दिखाए गए हैं। (न तो करता है git log --all, और न ही एक काम करने वाला रेपो है जो नंगे रेपो को क्लोन करके बनाया गया है - या तो के माध्यम से git log --allया केवल नई फ़ाइलों को देखकर जो वहां दिखना चाहिए)। यह अपने आप को देखने के लिए एक बहुत तेज परीक्षा है। ज्यादातर मैं बस उत्सुक हूँ कि मैं क्या याद कर रहा हूँ।
pho79

71
यदि आपका रीपोस्ट रेपो कुछ ऐसा है जैसे कि जीथब, जहां आपकी पहुंच नहीं है, तो पुश रन नहीं कर सकते हैं, आदि, आप git fetch -q origin master:masterअपने स्थानीय नंगे रेपो के अंदर कर सकते हैं । यह जीथब की मास्टर शाखा से नया सामान लाएगा और अपनी स्थानीय मास्टर शाखा को अपडेट करेगा।
अल्ट्रेउस

4
@Altreus वास्तव master:masterमें HEAD को दूरस्थ रेपो से आगे ले जाने के लिए आवश्यक है। मेरे मामले में एक समस्या के कारण मैं अब हमारे नंगे रेपो से जुड़ नहीं सका क्योंकि गिट गायब था। जब तक यह हल नहीं हो जाता है, मैं एक रिवर्स सुरंग का उपयोग git fetch ssh://localhost:8765/... master:masterकरता हूं और केंद्रीय रेपो का उपयोग करता हूं: और यह एक आकर्षण की तरह काम करता है। धन्यवाद!
एस्टानी

3
@Altreus यदि आप सभी शाखाएँ चाहते हैं तो आप कर सकते हैंgit fetch origin *:*
JBert

71

मैंने निम्न कमांड का उपयोग करके एक रिपॉजिटरी बनाई

git clone --bare <remote_repo>

तब मैंने थॉमस द्वारा उत्तर का उपयोग करके नंगे क्लोन को अपडेट करने की कोशिश की, लेकिन यह मेरे लिए काम नहीं किया। अपडेट करने के लिए नंगे रिपॉजिटरी प्राप्त करने के लिए (जो मुझे लगता है कि Let_Me_Be पूछ रहा था), मुझे एक दर्पण रिपॉजिटरी बनाना था:

git clone --mirror <remote_repo>

तब मैं मुख्य रिपॉजिटरी के अपडेट को हथियाने के लिए मिरर रिपॉजिटरी में निम्न कमांड चला सकता था:

git fetch --all

मैं मिरर ए गिट रिपॉजिटरी बाय पुलिंग पढ़कर इस समाधान पर आया था


22
मौजूदा नंगे रेपो को दर्पण में बदलने के लिए, आपको केवल <REPO> .git / config पर git config फाइल में 2 लाइनें मिलानी होंगी। में [remote "origin"]अनुभाग, जोड़ने fetch = +refs/*:refs/*औरmirror = true
इसहाक Betesh

@IsaacBetesh आप मेरा दिन :) बचाया
एसएमसी

54

ग्रेगोर से पुन : निर्माण के अलावा एकमात्र समाधान git clone --mirrorहै :

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

तो आप कर सकते हैं git fetchऔर आप अद्यतन देखेंगे। अजीब बात यह है कि इससे पहले, भले ही एक remoteकॉन्फ़िगर किया गया हो, इसमें कोई शाखाएं सूचीबद्ध नहीं हैं git branch -a


1
इसने वास्तव में मेरी मदद की! Capistrano प्रोजेक्ट / रेपो भी इस सेटिंग का उपयोग करके एक-लाइनर git remote updateको काम करने की अनुमति देता है ।
मिनकी पैन

1
यदि दूरस्थ में बल-अद्यतन या हटाई गई शाखाएँ हैं (और आप उन परिवर्तनों को प्रतिबिंबित करना चाहते हैं), तो आपको पंक्ति में क्रमशः जोड़ना --forceऔर जोड़ना पड़ सकता है । --prunegit fetch
इलियट वध

46

मान लिया जाये कि:

$ git clone --bare https://github.com/.../foo.git

साथ लाएँ:

$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune

नोट: --git-dir=foo.gitयदि आप cdपहले निर्देशिका के लिए आवश्यक नहीं है ।


2
हालांकि मुझे पता नहीं है कि कब क्या होता है, अगर originइसे परिभाषित नहीं किया जाता है, तो आप हमेशा originअपने मूल भंडार में पथ / यूआरएल के साथ भाग को बदल सकते हैं । जैसे$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
’११ को

यही वह है जिसकी तलाश में मैं हूं। यह पूरी तरह से काम किया।
मैक्सिमे रूइलर

13

बहुत गड़बड़ करने के बाद मैंने पाया कि यह मेरे लिए काम करता है।

एक बार:

git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

हर बार मैं सिंक करना चाहता हूं:

cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git  fetch ssh://git@source.address:2000/repo
git push --mirror remote_site

7
तीसरी पंक्ति ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*') कुंजी है। अच्छा जवाब, धन्यवाद!
पीटर - मोनिका

2
जैसा कि @peterh ने कहा, लाइन git config remote.origin.fetch 'refs/heads/*:refs/heads/*'इसका जवाब है। इस आदेश को मारने के बाद, मैं बस git fetchऔर रिमोट के साथ रेपो सिंक कर सकता हूं ।
जोकर

3

रिमोट रिपॉजिटरी के रूप में नंगे भंडार को जोड़ें, फिर उपयोग करें git push


इसलिए अगर मैं बिना धक्का दिए ऐसा करना चाहता हूं तो मैं नंगे रिपॉजिटरी का इस्तेमाल नहीं कर सकता और न ही किसी प्रतीकात्मक लिंक का इस्तेमाल कर सकता हूं?
Šमोन तोथ

पुशिंग रिपॉजिटरी कंटेंट को नंगे रिपॉजिटरी में ट्रांसफर करने की सामान्य विधि है, इससे बचने की कोई जरूरत नहीं है।
फिलिपिंस

2
आप हमेशा धक्का नहीं दे सकते। उदाहरण के लिए, अगर नंगे एक निजी नेटवर्क में है, और मुख्य
रिपोज

0

मेरे लिए इस संयोजन ने काम किया:

git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror

-चू के लिए पैरामीटर आवश्यक था, अन्यथा मुझे त्रुटि संदेश मिलता है: "वर्तमान शाखा में लाने से इंकार करना / गैर-नंगे भंडार के प्रमुख / प्रमुख / मास्टर" (यह भी देखें https://stackoverflow.com/a/19205680/4257875 )

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