2010-05-26 12 views
48

क्या कोई गिट रिपॉजिटरी सेट अप करने का कोई तरीका है, ताकि git pull एक रिमोट पर डिफॉल्ट हो और git push दूसरे पर डिफ़ॉल्ट हो? मुझे पता है कि remote के मान को .git/config के शाखा अनुभाग में बदलकर सेट कर सकते हैं, लेकिन प्रत्येक दिशा के लिए इसे अलग-अलग कैसे करें?गिट पुल और गिट पुश के लिए अलग-अलग डिफ़ॉल्ट रिमोट (ट्रैकिंग शाखा)

उत्तर

24

गिट 1.6.4 और बाद में, remote.<name>.pushurlगिट कॉन्फ़िगर के साथ सेट करें।

कोई भी केवल पढ़ने के लिए https: प्रोटोकॉल का उपयोग करके खींचने के लिए इसका उपयोग कर सकता है और एक एसएसएच-आधारित प्रोटोकॉल का उपयोग करके धक्का दे सकता है।


कहो origin के यूआरएल (remote.origin.url) https://git.example.com/some/repo.git है। यह केवल पढ़ने के लिए है, लेकिन आपके पास एसएसएच-आधारित 'यूआरएल' [email protected]:some/repo.git के माध्यम से लेखन पहुंच है। ssh आधारित प्रोटोकॉल पर जोर दे प्रभाव के लिए निम्न आदेश चलाएँ:

git config remote.origin.pushurl [email protected]:some/repo.git 
+0

एक कहने के लिए कैसे धक्का है ' विकास 'शाखा और एक ही रिमोट + नंगे गिट भंडार में' उत्पादन 'शाखा से आने से खींचें? प्रश्न के 3 साल बाद – Ninad

3

मैं क्या git config man page से इकट्ठा कर सकते हैं से, नदी के ऊपर रेपो है:

  • डिफ़ॉल्ट मूल के आधार पर
  • एक के लिए द्वारा branch.remote
  • हमेशा
  • सेट दोनों git pull/fetch और git pull

के लिए दी गई शाखा, मुझे डिफ़ॉल्ट डिफ़ॉल्ट रूप से दो अलग रिमोट रखने का कोई तरीका नहीं दिख रहा है।

+0

यह गिट v1.8.3.2 के लिए प्रैक्टिस में सही लगता है, दोनों 'गिट कॉन्फ़िगर रिमोट ...' और गिट रिमोट सेट-यूआरएल ... 'उत्तर, एक शाखा के लिए या पूरी तरह से एक रेपो की प्रति। –

+0

डिफ़ॉल्ट रिमोट को वर्तमान शाखा के लिए 'मूल' पर रीसेट करने के लिए और मिलान शाखा नाम से पुश/पुल करने के लिए: 'गिट पुश --सेट-अपस्ट्रीम मूल ' – hobs

71

के बाद से Git संस्करण 1.7.0, आप के साथ इस सेट कर सकते हैं:

git remote set-url --push origin https://your.push.com/blah/ 
+0

, लेकिन यह नया स्वीकार्य उत्तर होना चाहिए! – Kevlar

+1

@ केवलर क्यों? स्वीकार करने के लिए हमेशा "सर्वश्रेष्ठ" उत्तरों को चिह्नित करने के लिए उपयोग नहीं किया जाता है, लेकिन वह ओपी के लिए काम करता है (अधिक जानकारी के लिए अक्सर पूछे जाने वाले प्रश्न)। उत्तर से ऊपर प्रश्न पूछने के समय काम नहीं करेगा (यहां तक ​​कि अस्तित्व में नहीं होगा), क्योंकि गिट 1.8 से पहले था। स्वीकृत उत्तर हालांकि ओपी के लिए काम किया था। तीन साल बाद ओपी के फैसले को बदलने के लिए आपको क्या कारण है? – trejder

+7

@trejder स्टैक ओवरफ़्लो भी भविष्य के आगंतुकों के उपयोगी उत्तर देने के लिए एक जगह है, जो किसी खोज इंजन या जो भी हो, के माध्यम से कोई प्रश्न पूछता है। वर्तमान में सबसे अच्छा जवाब पहले दिखाई देने योग्य है। मैं यह नहीं कह रहा हूं कि ओपी * को स्वीकार किए गए उत्तर को बदलना चाहिए, लेकिन ऐसा करने के लिए यह पूरी तरह से उचित (और मेरी राय में एक सकारात्मक सकारात्मक) होगा। – amalloy

3

यह 1.7.1 और बाद के संस्करण में काम करता है -

git remote set-url --push origin [email protected]:username/somerepo.git 
+0

[user392887 के उत्तर] से अलग कैसे है (http://stackoverflow.com/a/17930364/41071)? – svick

+1

मेरे पास उस उत्तर को टिप्पणी करने या कम करने की क्षमता नहीं है। मेरे उत्तर में नोट करने के लिए दो महत्वपूर्ण चीजें: 1) मैं एसएसएच का उपयोग करता हूं। गिटहब के अनुसार, "हम गिटहब के साथ बातचीत करते समय एक एसएसएच कनेक्शन का उपयोग करने की दृढ़ता से अनुशंसा करते हैं। एसएसएच कुंजी पासवर्ड शामिल किए बिना विश्वसनीय कंप्यूटरों की पहचान करने का एक तरीका है।" 2) आरएचईएल/सेंटोस 6 का उपयोग करने वाला कोई भी व्यक्ति डिफ़ॉल्ट रूप से गिट 1.7.1 का उपयोग करेगा - 1.7.1 सेट-यूआरएल का समर्थन करता है, मैंने अभी इसका इस्तेमाल किया है। – potto

18

Git 1.8.3 के बाद से, आप आप क्या चाहते हैं (यानी pull और push के लिए अलग-अलग डिफ़ॉल्ट रिमोट वाले) करने के लिए remote.pushDefault विकल्प का उपयोग कर सकते हैं। आप किसी अन्य की तरह विकल्प सेट कर सकते हैं; उदाहरण के लिए, pushTarget दूरस्थ करने के लिए इसे स्थापित करने के लिए, का उपयोग

git config remote.pushDefault pushTarget 

निम्नलिखित प्रभाव पड़ेगा यह विकल्प:

  • git pull प्रासंगिक शाखा खंड में remote विकल्प में से दूरस्थ निर्दिष्ट से खींच लेंगे .git/config, जबकि
  • git pushremote.pushDefault द्वारा निर्दिष्ट दूरस्थ पर धक्का देगा।

ध्यान दें कि आप नाम एक दूरस्थ, नहीं एक यूआरएल के निर्दिष्ट करने के लिए की जरूरत है। यह इस समाधान को remote.<name>.pushurl से जुड़े समाधान से अधिक लचीला बनाता है, क्योंकि (उदाहरण के लिए) आप अभी भी दोनों रिमोट्स के लिए शाखाओं को ट्रैक करेंगे। चाहे आपको चाहिए या यह लचीलापन आपके ऊपर है या नहीं।

The release notes कहें कि यह विकल्प त्रिकोणीय वर्कफ़्लो का समर्थन करने के लिए विशेष रूप से जोड़ा गया था।

+0

अजीब: मैंने सोचा कि आप केवल अपस्ट्रीम पर दबाव डाल रहे हैं, और आप नहीं जानते कि कितने डाउनस्ट्रीम रेपो आपके द्वारा खींच रहे हैं: http://stackoverflow.com/a/2749166/6309 – VonC

+0

@VonC Ah, हाँ, मैं देखता हूं यह भ्रमित क्यों है। मैं आम तौर पर रिमोट को कॉल करता हूं जिसे मैं डिफ़ॉल्ट रूप से 'अपस्ट्रीम' से * खींचना चाहता हूं क्योंकि ... अच्छी तरह से ... यह उन खींचने के दौरान मेरे भंडार की अपस्ट्रीम है। लेकिन विकल्प 'पुशडिफॉल्ट' है, न कि 'pullDefault', इसलिए मैंने उदाहरण में नाम के रूप में 'डाउनस्ट्रीम' का उपयोग किया। यह संभवतः 'डिफ़ॉल्ट पुश लक्ष्य' कहने का एक बेहतर विचार है;) – MvanGeest

+0

@MvanGeest मैं सहमत हूं। लेकिन मैं पुष्टि करता हूं कि आप आम तौर पर "अपस्ट्रीम" को दबाते हैं। वहाँ एक (या बहुत कम और ज्ञात) अपस्ट्रीम। लेकिन कई (और अज्ञात) डाउनस्ट्रीम हो सकते हैं। ऐसा DVCS (जैसा कि "वितरित" में) ब्रह्मांड है। – VonC

संबंधित मुद्दे