मौजूदा रेपो में एक शाखा से एक नया GitHub रेपो कैसे बनाऊं?


170

मेरे पास मास्टर और नई-परियोजना शाखाएं हैं। और अब मैं नए-प्रोजेक्ट शाखा के आधार पर अपने मास्टर के साथ एक नया रेपो बनाना चाहूंगा।

पृष्ठभूमि: मेरे पास एक रिपॉजिटरी है जिसमें तीन स्वतंत्र अनुप्रयोग हैं। यह इस तरह से शुरू नहीं हुआ। रेपो में मूल रूप से सिर्फ एक ऐप था। समय के साथ, हालांकि, व्यापार की जरूरतें बदल गई हैं। एक ऐप दो बन गए (एक विरासत संस्करण और फिर से लिखना।) एक वेब सेवा को जोड़ा गया। तीन परियोजनाओं को शामिल करने के लिए अलग शाखाओं का उपयोग किया गया था। हालाँकि, वे किसी भी कोड को साझा नहीं करते हैं। और इसलिए उन्हें अपने स्वयं के रिपोज में विभाजित करना सरल होगा।

जवाबों:


294

मैंने @ user292677 के विचार के साथ शुरुआत की, और अपनी समस्या को हल करने के लिए इसे परिष्कृत किया:

  1. नए-रेपो को गितुब में बनाएँ ।
  2. पुराने रेपो की अपनी स्थानीय प्रति से सीडी जिसे आप निकालना चाहते हैं, जो नई-रेपो मास्टर बनने वाली नई- प्रोजेक्ट शाखा को ट्रैक करने के लिए स्थापित की गई है ।
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

नया गितुब रेपो समाप्त हो गया है। परिणाम है;

  • नया गितुब भंडार जिसे नया-रेपो नाम दिया गया है ,
  • जिसका masterवर्ष रेपो के से मेल खाती है नई परियोजना , के साथ
  • सभी इतिहास संरक्षित।

वास्तव में, मैंने पाया कि इस पद्धति का उपयोग करके, मैं शाखाओं के एक हाथ से चुने हुए चयन के साथ नया रेपो बना सकता हूं, जिसका नाम मैंने लिया है:

$ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

इसका परिणाम यह है कि पहले से मौजूद साइट 3 शाखा अब नए रेपो में भी स्थानांतरित हो गई है और रेल 3 के रूप में दिखाई देगी । यह वास्तव में अच्छी तरह से काम करता है: नेटवर्क आरेख नए मास्टर और रेल 3 को पूरे इतिहास के साथ और एक दूसरे के लिए उनके सही संबंध में दिखाता है

2013-12-07 को अपडेट करें: एक अन्य प्रोजेक्ट के साथ इसका उपयोग किया, और सत्यापित किया कि यह नुस्खा अभी भी काम करता है।

अपडेट 2018-01-11: https प्रोटोकॉल के लिए GitHub अनुशंसा का उपयोग करने के लिए अद्यतित चरण 3.। पकाने की विधि अभी भी काम करती है।


हाय @Dogweather, यह साझा करने के लिए धन्यवाद। क्या आप पता लगा सकते हैं कि आपकी पद्धति के बीच क्या अंतर है और मूल दूरस्थ url को बदल दें, नई रेपो विधि पर धक्का दें?
विंसेंट

5
डॉगवेदर, मैंने जितना याद किया है उससे अधिक आपके समाधान का उपयोग किया है। धन्यवाद! इससे पहले कि मैं मेरे लिए काम कर रहा था पहले मुझे
पुराने_ब्रांच की जांच करनी थी

3
ध्यान दें कि यह टैग कॉपी नहीं करेगा। मेरा मानना ​​है कि आपको इसकी आवश्यकता हो सकती --follow-tagsहै।
फैक्टर मिस्टिक

1
ध्यान दें कि आपको pushgit init
गितुब

1
मैं अपने सभी प्रतिबद्ध इतिहास को नए रेपो में स्थानांतरित नहीं करना चाहता, मैं सिर्फ उन कमिटों को कॉपी करना चाहता था जो बच्चे के भंडार से संबंधित हैं। क्या यह संभव है ??
अरबाज़ रिजवी


9
git clone -b new-project /path/to/repo /new/repo/path

संपादित करें: GitHub के भीतर, आप रेपो को "कांटा" कर सकते हैं, फिर अपने क्लोन में व्यवस्थापक टैब पर जाएं। "रिपॉजिटरी नाम" और "दृश्यता" के नीचे शाखाओं के ड्रॉप-डाउन मेनू के साथ "डिफ़ॉल्ट शाखा" है। चुनें new-project

पुन: संपादित करें: मुझे लगा कि यह वह masterशाखा है जिसे आप सेट करना चाहते हैं, न कि केवल "डिफ़ॉल्ट" शाखा। इसलिए…

  • GitHub पर, क्लोन them/repoकरने के लिए you/repo
  • Daud git clone git@github.com:you/repo.git
  • प्रारंभ करें gitk
  • [आप एक old-masterशाखा बनाना चाहते हैं ताकि आप पुराने कमिट्स का ट्रैक न खोएं।]
  • new-projectब्रांच पर हाल की कमिटमेंट खोजें , कमिट मैसेज पर राइट-क्लिक करें, और "यहां मास्टर मास्टर रीसेट करें" चुनें। (आप इसका उपयोग कमांड लाइन पर भी कर सकते हैं git-reset, लेकिन मैंने सही आह्वान नहीं किया है।)

आपके GitHub रेपो तक आपका अगला पुश --forceविकल्प के साथ करने की आवश्यकता होगी , लेकिन अन्यथा आप कर रहे हैं।

यदि यह आपके खुद के रेपो में से एक है तो आप यह कर रहे हैं ...

  • Daud git clone git@github.com:you/orig.git
  • Daud git clone orig copy
  • जैसा कि मैंने ऊपर वर्णित किया है, लेकिन स्थानीय copyरेपो के भीतर , उस masterशाखा को रीसेट करें जहां आप इसे चाहते हैं।
  • खाली GitHub प्रोजेक्ट बनाएं you/copy। GitHub के निर्देशों का पालन करें, उस प्रोजेक्ट को अपने स्थानीय संस्करण के लिए रिमोट के रूप में सेट करें copy, पुश करें master, और आपका काम हो गया!

हम्म! मुझे यकीन नहीं है कि पहला कदम कैसे करना है: गितुब के भीतर एक रेपो क्लोनिंग। मुझे नहीं लगता कि यह संभव है।
डॉगवेदर

@ डॉगवेदर, इसे गिटहब पर "फोर्किंग" कहा जाता है; मैंने अपना उत्तर स्पष्टता के लिए संपादित किया है।
जेसी सलोमन

मैं एक खाते में एक रेपो को कांटा करने में असमर्थ रहा हूं। क्या आपने खुद यह कोशिश की है?
डॉगवेदर

5
  1. NEW_REPOSITORY को github में बनाएँ।
  2. सीडी OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + मास्टर: मास्टर

इतना ही। (नोट: गिट इतिहास संरक्षित)

मैंने ऊपर दिए गए उत्तर की कोशिश की और पाया कि यह विशिष्ट नहीं है क्योंकि यह निर्दिष्ट नहीं किया गया था + मास्टर: मास्टर जो कि मुझे यह काम करने के लिए आवश्यक है। यह बहुत अच्छा काम करता है।

स्रोत (github के साथ ssh मुद्दों से बचने के लिए मेरे संशोधन के साथ): मौरिसियो आइलो, पूर्व जावा वरिष्ठ डेवलपर, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a -branch में एक मौजूदा-भंडार


यह वास्तव में स्वीकृत उत्तर की तुलना में अधिक उपयोगी है। यह उन स्थितियों में भी काम करता है जहां Git src refspec त्रुटियों के बारे में शिकायत करता है जब पुराने को नए भंडार में धकेलने में विफल रहता है।
अनौपचारिक दुखद

2

सुनिश्चित नहीं है कि यह एक अच्छा तरीका है, लेकिन यह वैसे भी आसान है:

git clone -b new-project git@github.com:User/YourProject.git newProjcet

फिर गितुब पर एक नया रेपो बनाएं, और इसे धक्का दें।


2

यह याद करते हुए कि जब आप केवल एक नया रेपो बनाते हैं, तो आप पुराने का संदर्भ खो देते हैं, और नए के लिए सिंक किए गए मूल प्रोजेक्ट के किसी भी अपडेट को बनाए रखना कठिन बना देते हैं। शायद रेपो को कांटा करना बेहतर नहीं है?


0

सही उत्तर के लिए थोड़ा अतिरिक्त:

$ git पुश git@github.com: accountname / new_repo + old_branch: मास्टर

"git@github.com: accountname / new_repo" => github से प्राप्त करें "क्लोन या डाउनलोड" सबसे पुराना मेनू

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