मैं एक अलग रिमोट जोड़े बिना अपने कांटे को सिंक में कैसे रख सकता हूं?


302

चलो मान someone/foobarलेते हैं कि GitHub पर एक भंडार है, जिसे मैंने दिया था me/foobar

मैं अलग-अलग रिमोट को जोड़ने के लिए पेरेंट रिपॉजिटरी से नए कांटे को सीधे अपने कांटे पर कैसे खींचूं , और वहां से नियमित रूप से खींचने के लिए याद रखना चाहिए ?

लक्ष्य यह है:

  • git pull मूल भंडार से लाने के लिए
  • git push मेरे कांटे को सबकुछ भेजने के लिए

26
@Olufemi द्वारा किया गया आश्चर्यजनक उत्तर आपको वही लगता है जो आप चाहते हैं, सिवाय इसके कि क्रिस्चियनगोश एक टिप्पणी में नोट करता है, आप अपनी शाखा के शीर्ष पर "मर्ज कमिट" के साथ समाप्त होते हैं, और "तुलना करने के लिए कुछ भी नहीं" दिखाई नहीं देगा। यह कई परियोजनाओं के लिए अस्वीकार्य लगता है जिसके लिए आप उन्हें खींचने के लिए शाखाएं बनाना चाहते हैं। तो क्या वास्तव में व्यक्तिगत कंप्यूटर पर आर्कन गिट कमांड चलाने के बिना जीथब में योगदानकर्ता वर्कफ़्लोज़ का यह सबसे बुनियादी तरीका है? या हो सकता है कि मैं अपना पूरा रेपो और री-फोर्क हर बार फेंक दूं जो मैं योगदान देना चाहता हूं ??
nealmcb




@nealmcb आपकी शाखा के शीर्ष पर एक "मर्ज कमिट" के साथ समस्या नहीं है यदि आप छूट देते हैं?
मार्को

जवाबों:


586

फोर्किट गेट रिपॉजिटरी मी / फोब्बर खोलें ।

तुलना पर क्लिक करें :

यहाँ पृष्ठ का एक नमूना चित्र है

आपको सूचना मिलेगी:

तुलना करने के लिए कुछ भी नहीं है।
कोई: मास्टर मेरे ऊपर से सभी के साथ तारीख तक है: मास्टर । अपनी तुलना के लिए आधार स्विच करने का प्रयास करें ।

इस पृष्ठ पर आधार स्विच करने पर क्लिक करें :

यहाँ पृष्ठ पर एक उदाहरण है

फिर आपको किसी के लिए किए गए सभी कमिट्स देखने को मिलते हैं / जिस दिन आपने उसे फोर्क किया था।

क्रिएट पुल निवेदन पर क्लिक करें :

यहाँ एक नमूना पृष्ठ है

पुल अनुरोध को शीर्षक और शायद विवरण दें और पुल अनुरोध बनाएँ पर क्लिक करें

अगले पृष्ठ पर, पृष्ठ के नीचे स्क्रॉल करें और मर्ज पुल अनुरोध पर क्लिक करें और मर्ज की पुष्टि करें

आपका Git रिपॉजिटरी me / foobar अपडेट किया जाएगा।

संपादित करें: रिबास विकल्प यहां दिखाए गए हैं:

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


50
यह भ्रामक है क्योंकि जब आप स्विच करते हैं तो बेस गितुब आपको मूल रेपो के लिए पृष्ठ में फेंक देता है, इसलिए ऐसा लगता है जैसे आप अपस्ट्रीम फोर्क में एक पुल अनुरोध खोल रहे हैं। लेकिन यह पूरी तरह से काम करता है।
एडुआर्डो

8
ऊपर भ्रामक स्थिति उल्लेख से बचने के लिए, यह बेहतर क्लिक करेंगे Editबटन और मैन्युअल रूप से स्विच base forkकरने के लिए me/foobarऔर head forkकरने के लिए someone/foobar। इस तरह यह बहुत स्पष्ट है
macemers

26
एक और एक: यह ठीक काम करता है यदि आपने पहले ही नहीं किया था, लेकिन बाद में आपके प्रतिबद्ध इतिहास के शीर्ष पर "मर्ज कमिट" है। इस प्रकार "तुलना करने के लिए कुछ भी नहीं" दिखाई नहीं देगा। इसके बजाय किसी को काम करने के लिए "एडिट" बटन और मैन्युअल रूप से इंटरचेंज बेस और फोर्क का उपयोग करना चाहिए।
क्रिश्चियन गोस्च

26
क्या उस हास्यास्पद मर्ज कमिटमेंट से छुटकारा पाने का कोई तरीका नहीं है?
कुमारहर्ष

17
सितंबर 2016 से @kumar_harsh , अब मर्ज कमिटमेंट को टालने वाले पुल अनुरोधों के लिए एक "रिबेस और मर्ज" विकल्प है।
वाल्डिएरियस

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

हालांकि इसमें एक चेतावनी है:
यदि आप अपने कांटे में केवल एक ही बदलाव कर रहे हैं तो यह एकदम सही है।
हालांकि, अगर इसे अन्य लोगों के साथ साझा किया जाता है, तो आपको अपने कांटे से खींचना पड़ सकता है, इस मामले में एक अलग रिमोट एकमात्र उपाय है।

संपादित करें:
वास्तव में, आप कर सकते हैं git pull git@github.com:me/foobar , जो चेतावनी निकालता है।
पसंद आपकी है, जिसे याद रखना आसान है।


8

मैंने ऐसा करने के लिए GitHub Web UI का उपयोग करते हुए एक काफी सरल विधि का उपयोग किया :

  1. मूल गेट रिपॉजिटरी खोलें (कांटेक्ट गिट रिपॉजिटरी नहीं me/foobar)
  2. Src फ़ोल्डर पर जाएं, और उस फ़ाइल को खोलें जिसे आप बदलना चाहते हैं
  3. पेन आइकन पर क्लिक करें। यह मास्टर रिपॉजिटरी के वर्तमान संस्करण के आधार पर "पैच -1" नामक आपके व्यक्तिगत कांटे में स्वचालित रूप से एक लेबल बनाएगा: यहां छवि विवरण दर्ज करें
  4. का आनंद लें! यहां छवि विवरण दर्ज करें

3
यह कोशिश करते हुए, मूल रूप से मूल गिट रेपो में फ़ाइल पर संपादक को खोलता है। मुझे मूल git रेपो में विशेषाधिकार (डिज़ाइन द्वारा) नहीं लिखना है। यह इस पद्धति के लिए लगता है कि आपको फ़ाइल को बदलना होगा, अन्यथा फ़ाइल को "सहेजने" का कोई तरीका नहीं है। फ़ाइल को सहेजे बिना, मुझे आपके forked रिपॉजिटरी में दिखाने के लिए "पैच -1" शाखा के बराबर नहीं मिल सका। मुझे यहां क्या समझ नहीं आ रहा है?
इलेक्ट्रो-बनी

5

"पुल" एप्लिकेशन एक स्वत: सेट अप और भूल जाते हैं समाधान है। यह अपस्ट्रीम रिपॉजिटरी के साथ आपके कांटे की डिफ़ॉल्ट शाखा को सिंक करेगा।

URL पर जाएं, हरे "इंस्टॉल करें" बटन पर क्लिक करें और उन रिपॉजिटरी का चयन करें जहां आप स्वचालित सिंक्रनाइज़ेशन को सक्षम करना चाहते हैं।

GitHub पर प्रति घंटे एक बार सीधे शाखा को अपडेट किया जाता है, अपनी स्थानीय मशीन पर आपको यह सुनिश्चित करने के लिए मास्टर शाखा को खींचने की आवश्यकता होती है कि आपकी स्थानीय कॉपी सिंक में है।

Https://stackoverflow.com/a/58965171/946850 में भी उत्तर दिया गया ।


1

एक अन्य विकल्प Update from upstreamRepoName/masterमैक के लिए गिटहब में बटन का उपयोग करना है (और मैं विंडोज के लिए गिटहब मान रहा हूं)।

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


TIL: कि वेब इंटरफेस से परे GitHub के लिए ऐप हैं :-) [और यह शर्म की बात है कि उनके बीच का अनुभव एकीकृत नहीं है]
टॉम गुडफेलो

मुझे यह विंडोज़
डेनिस

1
@Denis यह उनका पुराना ऐप है। मुझे यकीन नहीं है कि उनके नए ऐप में यह है।
स्टीव मोजर

अहा। यह "गिटहब डेस्कटॉप" (मैक के लिए, विंडोज के बारे में निश्चित नहीं) में काम किया।
माइकेलोक सिप

0

मुझे नहीं पता कि यह एक और रिमोट को जोड़े बिना कैसे किया जा सकता है, हालांकि मैं हमेशा रेपो को जोड़ता हूं जिसे मैंने upstreamरिमोट के रूप में कांटा था इसलिए मैं बस कर सकता हूं:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

यह सभी शाखाओं को सिंक कर देगा। नए बनाने ( refs/heads/केवल मौजूदा शाखाओं को अद्यतन करने के लिए निकालें )। यदि आपकी किसी शाखा ने डायवर्ट किया है तो यह उस शाखा के लिए एक त्रुटि है।

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