2012-03-02 14 views
104

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

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

उत्तर

185

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

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

चरण 3. सिफारिश https प्रोटोकॉल का उपयोग करता है। वैकल्पिक रूप से यदि आपके पास एसएसएच कुंजी सेट अप हैं तो आप कर सकते हैं: $ git push [email protected]:accountname/new-repo +new-project:master

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

  • एक नया Github रिपॉजिटरी नई रेपो नाम है,
  • सभी इतिहास संरक्षित के साथ जिसका master वर्ष रेपो के नई परियोजना से मेल खाती है
  • ,।

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

$ git push [email protected]:accountname/new_repo +new-project:master +site3a:rails3

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

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

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

+0

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

+4

मुझे खेद है, यह बहुत लंबा रहा है क्योंकि मैंने इसे सब कुछ समझ लिया था। :- पी – Dogweather

+1

यह कमाल है। इस लिए आपका बहुत - बहुत धन्यवाद। – welbornio

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

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

को पुनः संपादित करें: मैं बस महसूस किया कि यह master शाखा आप सेट करना चाहते हैं, न सिर्फ "डिफ़ॉल्ट" शाखा है। तो ...

  • गीटहब पर, क्लोन them/repo से you/repo पर।
  • भागो git clone [email protected]:you/repo.git
  • प्रारंभ gitk
  • [आप एक old-master शाखा बनाने के लिए ताकि आप पुराने प्रतिबद्ध का ट्रैक खोना नहीं है चाहते हो सकता है।]
  • सबसे हाल ही में new-project शाखा पर प्रतिबद्ध, प्रतिबद्ध संदेश पर राइट क्लिक करें खोजें, और चुनें "मास्टर रीसेट यहां शाखा "।

आपका अगला धक्का अपने GitHub रेपो के लिए (आप भी इस git-reset का उपयोग कर आदेश पंक्ति पर कर सकते हैं, लेकिन मैं सही मंगलाचरण पता लगा नहीं किया है।) --force विकल्प के साथ किया जा करने की आवश्यकता होगी, लेकिन अन्यथा आप कर रहे हैं।

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

  • भागो git clone [email protected]:you/orig.git
  • भागो git clone orig copy
  • जैसा कि मैंने ऊपर वर्णित है, लेकिन स्थानीय copy रेपो के भीतर से, master रीसेट आप जहां चाहें करने के लिए शाखा।
  • खाली GitHub परियोजना you/copy बनाएँ। copy के अपने स्थानीय संस्करण के लिए एक रिमोट के रूप में है कि परियोजना स्थापित करने, master धक्का GitHub पर निर्देशों का पालन करें, और आप काम हो गया!
+0

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

+0

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

+0

मैं एक खाते के भीतर एक रेपो फोर्क करने में असमर्थ रहा हूं। क्या आपने यह कोशिश की है? – Dogweather

1

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

git clone -b new-project [email protected]:User/YourProject.git newProjcet 

तो GitHub पर एक नया रेपो बनाने के लिए, और यह धक्का।

1

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

0

लिटिल अलावा:

$ Git धक्का [email protected]: ACCOUNTNAME/new_repo + old_branch: मास्टर

"Git @ GitHub।कॉम: ACCOUNTNAME/new_repo "=> GitHub से मिलता है" क्लोन या डाउनलोड "अधोगामी मीनू

8

अद्यतन:

सीडी स्थानीय रेपो को old_branch युक्त और:

$ git push https://github.com/accountname/new_repo.git +old_branch:master 
+0

यह सब मुझे चाहिए और यह काम करता है। –

0
  1. GitHub में NEW_REPOSITORY बनाएं ।
  2. सीडी OLD_REPOSITORY
  3. Git धक्का https://github.com/accountname/NEW_REPO + मास्टर: मास्टर

और यह सब कुछ है। (नोट: गिट इतिहास संरक्षित)

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

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

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

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