एक ही संगठन में github पर एक git रेपो कॉपी / फोर्क


84

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

यह उस बिंदु पर आया है जहां मैं इसे दो अलग-अलग रेपो में विभाजित करना चाहता हूं, प्रत्येक डोमेन के लिए एक।

Github मुझे उसी संगठन में कांटा लगाने नहीं देगा। "गिट डुप्लीकेट रेपो" के लिए खोज करने से पता चलता है कि मुझे नंगे क्लोन और दर्पण को धक्का देना चाहिए, लेकिन ऐसा लगता है कि दोनों रिपोज को सिंक में रखने के लिए है, जो मैं नहीं करना चाहता।

इसके बारे में जाने का सबसे अच्छा तरीका क्या है? यदि संभव हो तो मैं नई प्रति में पुरानी प्रतिबद्ध इतिहास को संरक्षित करना चाहता हूं।


1
दरअसल, git clone --bareऔर git push --mirrorविकल्प वही हैं जो आप चाहते हैं। यह दोनों रिपोज को सिंक में नहीं रखता है। लेकिन यह सब कुछ संरक्षित करता है , जिसमें सभी शाखाएं, टैग इत्यादि शामिल हैं। बस एक कॉपी बनाने के लिए अस्थायी निर्देशिका में ऐसा करें। फिर अपने प्रोजेक्ट डायरेक्टरी में अपने रिमोट से सीधे नई कॉपी को क्लोन करें।
विशाललसुपरोमिरमैन

जवाबों:


104

बस एक नई रिपॉजिटरी बनाएं और अपनी वर्किंग कॉपी से इसे पुश करें:

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

अब आपके पास एक नया भंडार है myrepo-new, जो समान है myrepo-original


3
ठीक है, और ये एक दूसरे को ट्रैक नहीं करेंगे, है ना? मतलब वे दो अलग-अलग डिस्कनेक्ट रेपो बन जाते हैं? मैं यही चाहता था।
जम्मिंगर

3
जब तक आप pushइसे स्पष्ट रूप से नहीं करते तब तक न तो रिपॉजिटरी अपडेट करेगा , और "नया" रिपॉजिटरी पुराने से कोई संबंध प्रदर्शित नहीं करेगा।
लार्क्स

धन्यवाद! ऐसा लगता है कि मुझे क्या चाहिए।
जम्मिंगर

3
आप सभी शाखाओं को भी आगे बढ़ा सकते हैं:git push --all origin
Marius

यह मेरे लिए काम करता है, लेकिन मुझे URL के लिए एक अलग प्रारूप में बदलना पड़ा: $ git दूरस्थ
सेट-

15

यदि आपको कांटे के संबंध की आवश्यकता नहीं है (जैसे कि आप किसी भी कारण से किसी प्रकार का डिकूप्ड वैकल्पिक रेपो चाहते हैं), तो रेपो को आपके Google द्वारा ढूंढी गई रूपरेखाओं के रूप में दोहराते हुए और लार्क्स का उत्तर ठीक है।

यदि आप करते हैं यह एक कांटा, संपर्क Github समर्थन (support@github.com या बनाना चाहते https://github.com/support ), और वे आप के लिए एक ही संगठन में एक कांटा पैदा करेगा। (वे इस बारे में picky नहीं कर रहे हैं, आपको रेपो के लिए एक वैकल्पिक नाम प्रदान करना होगा, क्योंकि रेपो नाम एक खाते के लिए अद्वितीय होना चाहिए।)


अद्यतन : उपयोगकर्ता स्टीव राइस नीचे की टिप्पणियों में रिपोर्ट करते हैं कि GitHub समर्थन ने कहा कि वर्तमान में आपके खाते में दूसरा कांटा स्थापित नहीं किया जाएगा।

GitHub ने हाल ही में एक रेपो को एक ही खाते में जमा करने के संभावित विकल्पों के बारे में एक लेख पोस्ट किया है। आप उस लेख को यहाँ पढ़ सकते हैं


4
समर्थित समर्थन, उनकी प्रतिक्रिया: "इस समय, एक खाते में एक ही नेटवर्क में दो रिपोज नहीं हो सकते।" वे इसके बजाय दर्पण रेपो स्थापित करने का सुझाव देते हैं ।
स्टीव राइस

आह कि बेकार है। क्षमा करें, मुझे नहीं पता था कि उन्होंने अपनी नीति बदल दी थी :(
नेविक रेहेल

10

पेज के ऊपर + मेनू पर Github के आयात रिपॉजिटरी विकल्प का उपयोग करें या बस खोलें

https://github.com/new/import

यह कॉपी किए गए रिपॉजिटरी की सटीक सामग्री के साथ एक नया भंडार बनाता है। नकारात्मक पक्ष यह है कि ( Iarsks द्वारा git आदेशों के उत्तर के रूप में ) यह Github के लिए एक कांटा के रूप में नहीं गिना जाता है।


आप इस विकल्प को कैसे काम नहीं कर पाए? मैंने इसे अभी रिटायर किया है और यह दो आसान चरणों में काम करता है। वैकल्पिक रूप से, github में एक स्थानीय रेपो बनाएं, फिर वहां आयात सुविधा का उपयोग करें, जैसे github.com/sarob/mytest/import
सरोब

हमारे GHE बनाम github.com के साथ कुछ हो सकता है, लेकिन यह वहाँ पर काम नहीं करता है।
सेरासोसे

4

मूल रेपो को जोड़ने का एक और तरीका होगा, कॉपी किया जाना, हमारे वर्तमान रेपो के लिए रिमोट के रूप में।

#create a new repo in the org1 organization called myrepo-new

अपने स्थानीय टर्मिनल में, चलाएं:

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master

1

दूसरा तरीका:

एक नया संगठन बनाएं और वहां फोर्क करें। यदि रेपो निजी है, तो यह नए org में भी निजी रहेगा। तब आप बाहरी देवों तक पहुंच दे सकते हैं या जो भी आप कांटे वाले रेपो को चाहते हैं और वे पीआरओ को मूल रेपो में वापस बढ़ा सकते हैं।


-2

क्या आप केवल स्थानीय फ़ोल्डर की नकल नहीं कर सकते, git सामान हटा सकते हैं:

rm -rf .git*

फिर उस फोल्डर में एक नया रिपॉजिटरी बनाएं? क्लीनर और आसान लगता है।


2
हटाने ./.git/से ओपी के इरादे में मदद नहीं मिलेगी, "यदि संभव हो तो नई प्रति में पुरानी प्रतिबद्ध इतिहास को संरक्षित करने के लिए।"
MarkHu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.