GitHub: सार्वजनिक रिपॉजिटरी के कांटे को निजी कैसे बनाया जाए?


247

मैं एक सार्वजनिक भंडार कैसे निकाल सकता हूं, लेकिन अपने कांटे को निजी बना सकता हूं? मेरे पास निजी रिपॉजिटरी का समर्थन करने के लिए सदस्यता है।

जवाबों:


394

उत्तर सही हैं, लेकिन सार्वजनिक रेपो और कांटे के बीच कोड को कैसे सिंक किया जाए, इसका उल्लेख नहीं है।

यहाँ पूर्ण वर्कफ़्लो है (हमने ओपन सोर्स रिएक्ट नेटिव से पहले यह किया है ):


सबसे पहले, रेपो की नकल करें जैसा कि अन्य लोगों ने कहा (विवरण यहां ):

Github UI केprivate-repo माध्यम से एक नया रेपो बनाएं (इसे कॉल करें ) । फिर:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

निजी रेपो पर क्लोन करें ताकि आप इस पर काम कर सकें:

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

पब्लिक रेपो से नई हॉटनेस खींचने के लिए:

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

बहुत बढ़िया, आपके निजी रेपो में अब सार्वजनिक रेपो प्लस से आपके परिवर्तनों का नवीनतम कोड है।


अंत में, निजी रेपो -> सार्वजनिक रेपो अनुरोध बनाने के लिए:

सार्वजनिक रेपो पृष्ठ के शीर्ष दाईं ओर सार्वजनिक रेपो (छोटा "कांटा" बटन) का कांटा बनाने के लिए GitHub UI का उपयोग करें। फिर:

git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

अब आप सार्वजनिक-रेपो के लिए जीथब यूआई के माध्यम से एक पुल अनुरोध बना सकते हैं, जैसा कि यहां वर्णित है

एक बार परियोजना के मालिक आपके पुल अनुरोध की समीक्षा करते हैं, तो वे इसे मर्ज कर सकते हैं।

बेशक पूरी प्रक्रिया को दोहराया जा सकता है (बस उन चरणों को छोड़ दें जहां आप उपाय जोड़ते हैं)।


2
सार्वजनिक रेपो के एक सामान्य क्लोन के लिए खाली निजी रेपो को एक नए रिमोट के रूप में क्यों नहीं जोड़ा जा सकता है और फिर रिमोट को धक्का दे सकता है? क्या फर्क पड़ेगा?
फाल्को मेनज

@FalkoMenge मेरा भी यही सवाल है। Git-scm.com/docs/git-clone को पढ़ते हुए , ऐसा लगता है कि एक सामान्य git cloneरिमोट ट्रैकिंग शाखाएं स्थापित करेगा और शायद क्लोन किए गए रेपो में कुछ अन्य कॉन्फ़िगरेशन जो आप वास्तव में नहीं चाहते हैं। जबकि - abare क्लोन सिर्फ .it dir को रिमोट से कॉपी करता है।
बेन्लिच

1
क्या यह भी सार्वजनिक शाखा को निजी प्रतिबद्ध इतिहास को आगे बढ़ाएगा?
सुखजिंदर सिंह

1
@ सुखजिंदर सिंह जी, आखिरी कदम सार्वजनिक रेपो में निजी प्रतिबद्ध इतिहास को आगे बढ़ाएगा। यदि आप ऐसा नहीं चाहते हैं, तो आप उन्हें सार्वजनिक रेपो में मर्ज करते समय अपने कमिट्स को स्क्वैश कर सकते हैं, और अपने सभी परिवर्तनों के साथ एक एकल कमिट को धक्का दे सकते हैं। उदाहरण के लिए देखें stackoverflow.com/questions/5308816/how-to-use-git-merge-squash
मार्टिन कोनिसक

1
मुझे वह चरण मिला जहां मैंने अपने निजी रेपो को क्लोन किया और फिर एक बदलाव किया। मेरे द्वारा किए गए कोई भी परिवर्तन git द्वारा किसी का ध्यान नहीं गया। git statusआज तक सब कुछ दिखाता है, काम कर रहे पेड़ को कोई फर्क नहीं पड़ता कि मैं क्या बदलूं। नतीजतन मैं कुछ भी प्रतिबद्ध और धक्का नहीं कर सकता। मैंने इस प्रयास के लिए 2 बार और नया निजी रेपो हटा दिया, लेकिन मैं इसी मुद्दे पर चलता रहा। कोई सुझाव?
होगा

92

अब एक और विकल्प है (जनवरी -2015)

  1. एक नया निजी रेपो बनाएं
  2. खाली रेपो स्क्रीन पर "आयात" विकल्प / बटन होता है यहां छवि विवरण दर्ज करें
  3. इसे क्लिक करें और मौजूदा github repo url डालें कोई github विकल्प का उल्लेख नहीं है, लेकिन यह github repos के साथ भी काम करता है। यहां छवि विवरण दर्ज करें
  4. किया हुआ

19
यह काम करता है, हालांकि थोड़ा अलग है। (मैंने अगस्त 2015 में कोशिश की)। मुझे आयात विकल्प / बटन नहीं मिला, इसलिए इसे googled और इस URL में समाप्त कर दिया। import.github.com/new यहां, आप मौजूदा github url दर्ज कर सकते हैं और चेक इट बटन पर क्लिक कर सकते हैं । एक बार सत्यापित हो जाने के बाद, आप अपने नए रेपो का नाम दर्ज कर सकते हैं और निजी बटन पर क्लिक करें और फिर आरंभ
शिवा

2
मेरा मानना ​​है कि @MattvanAndel का मतलब है कि टिप्पणी सही है, मूल उत्तर नहीं। मैंने भी शिव की टिप्पणी का अनुसरण किया और यह काम कर गया। ध्यान दें कि आपको पहले स्थानीय निजी भंडार नहीं बनाना चाहिए!
डेविड एच।

यदि मैं इस तरह से एक निजी "कांटा" बनाता हूं और इसे फिर से सार्वजनिक कांटा बनाना चाहता हूं, तो क्या मैं ऐसा कर सकता हूं?
एंडर्स लिंडन

2
अगर आप अपनी टिप्पणी का उत्तर देंगे तो @ शिव मैं उत्थान करूंगा।
bebbi

36

वर्तमान उत्तर स्पष्टता के लिए थोड़े से पुराने हैं:

संक्षिप्त उत्तर है:

  1. पब्लिक रेपो का नंगे क्लोन करो ।
  2. एक नया निजी बनाएँ।
  3. एक है दर्पण धक्का नए निजी एक करने के लिए।

यह GitHub पर प्रलेखित है: डुप्लिकेटिंग-ए-रिपॉजिटरी


4
क्या ऊपर की ओर बदलाव को खींचने का एक तरीका है? यह एक रेपो के लिए महत्वपूर्ण है जिसके पास एक उदार लाइसेंस है - मैंने अपने रेपो को निजी बना दिया है, लेकिन फिर भी अपस्ट्रीम परिवर्तनों को मर्ज करना पसंद करेगा।
अमरप्रभु

2
हाँ। आपको दूसरे रेपो को एक नए (ट्रैकिंग) रिमोट (जैसे 'अन्य-रेपो') के रूप में जोड़ने में सक्षम होना चाहिए और फिर समय-समय पर लाने और उसमें से बदलाव लाने (जैसे। 'अन्य-रेपो / स्थिर' को मर्ज करें)।
स्टेफानो

26

आपको रेपो की नक़ल करनी है

आप इस डॉक को देख सकते हैं (गितुब से)

फोर्किंग के बिना एक रिपॉजिटरी का डुप्लिकेट बनाने के लिए, आपको मूल रिपॉजिटरी और मिरर-पुश के खिलाफ एक विशेष क्लोन कमांड को नए पर चलाने की आवश्यकता है।

निम्नलिखित मामलों में, आप जिस रिपॉजिटरी को पुश करने की कोशिश कर रहे हैं - जैसे कि उदाहरणार्थी / नया-रिपॉजिटरी या उदाहरण के लिए / मिरर किया हुआ - पहले से ही गिटहब पर मौजूद होना चाहिए। अधिक जानकारी के लिए "एक नया भंडार बनाना" देखें।

एक रिपॉजिटरी को मिरर करना

एक सटीक डुप्लिकेट बनाने के लिए, आपको नंगे-क्लोन और दर्पण-धक्का दोनों प्रदर्शन करने की आवश्यकता है।

कमांड लाइन खोलें, और ये कमांड टाइप करें:

$ git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

$ cd ..
$ rm -rf old-repository.git
# Remove our temporary local repository

यदि आप किसी अन्य स्थान पर एक रिपॉजिटरी को दर्पण करना चाहते हैं, जिसमें मूल से अपडेट प्राप्त करना शामिल है, तो आप दर्पण को क्लोन कर सकते हैं और समय-समय पर परिवर्तनों को धक्का दे सकते हैं।

$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

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

$ git fetch -p origin
$ git push --mirror

https://help.github.com/articles/duplicating-a-repository


यह रेपो का एक क्लोन बनाता है लेकिन यह GitHub अर्थों में एक कांटा नहीं बनाता है। जब आप गिटहब में एक वास्तविक कांटा बनाते हैं, तो यह कांटा नाम के तहत "उदाहरण के लिए उदाहरण के लिए / रिपॉजिटरी-टू-मिरर से कांटा" एक पाठ दिखाता है। जब आप github.com/exampleuser/new-repository/network/members पर नेविगेट करते हैं, तो यह अन्य सभी कांटों का एक पेड़ भी दिखाता है।
अपातियो

20

GitHub में अब एक आयात विकल्प है जिससे आप अपनी नई आयातित रिपॉजिटरी को सार्वजनिक या निजी रूप से चुन सकते हैं

Github रिपोजिटरी आयात


आयात अभी भी एक बड़े भंडार (5 दिन) पर चल रहा है, उनकी जाँच करना बहुत तेज़ है, लेकिन हो सकता है कि इसे अद्यतित रखने के लिए और कदम हों। धीमापन समझ में आता है क्योंकि मुझे लगता है कि यह सब कुछ न केवल मास्टर शाखा को आयात करता है, बल्कि मैं चाहता हूं कि यह तेज हो ...
लियाम मिशेल

1
मैं एक ही जवाब जोड़ने वाला था, लेकिन पहले करने के लिए धन्यवाद। खुशी है कि पिछले साल जनवरी के बाद से गिथब फ्री प्राइवेट रेपो उपलब्ध है। : D
OBL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.