2012-04-27 15 views
6

मेरे काम हमारे स्थानीय नेट पर GitHub के एक निजी उदाहरण के लिए सार्वजनिक GitHub से हमारे खजाने ले जाने के लिए है करने के लिए Github से भंडार।स्थानांतरण "आधिकारिक" Git एक निजी GitHub

मेरे सोचा उन्हें

git clone --bare <github-repo-url> 
git push --mirror <local-github-url> 

साथ ले जाने के लिए एक संक्रमण समय के दौरान है, मैं पिताजी GitHub पर रिपोजिटरी से दर्पण अद्यतन ही बनाने के लिए सक्षम होना चाहिए। (या मैं करूँगा? मुझे यूआई में अपडेट करने के लिए कोई कमांड नहीं मिला है।)

फिर मैं "आधिकारिक" जिथब रिपोजिटरी को हटा दूंगा, और दर्पण आधिकारिक बन जाएगा।

लेकिन यह कैसे होता है? क्या प्रत्येक डेवलपर को .git/config में "मूल" के लिए यूआरएल बदलने की आवश्यकता है?

दर्पण धक्का है कि इसके क्लोन-माता पिता से अपडेट नहीं हैं स्वीकार करेंगे? डेवलपर्स नई (निजी) रेपो क्लोन और वहाँ से पर जाने के लिए के लिए

+0

अधिक जानकारी: "स्थानीय-गीथब-यूआरएल" वास्तव में एक गिथब है। यह एक निजी जिथब एंटरप्राइज़ सेवा है। मेरे पास निजी गिथब तक कोई खोल या क्रॉन्टाब पहुंच नहीं है। – Mojo

उत्तर

0

सरल प्रक्रिया होगी।
वे अपने पूर्व रेपो में प्रगति में किसी भी परिवर्तन लंबित हैं, तो वे पैच के रूप में उन निर्यात करके उन्हें नए origin वापस करने के लिए जोर दे रहा से पहले नए स्थानीय रूप से क्लोन रेपो पर उन्हें लागू कर सकते हैं। (What is the difference between 'git format-patch' and 'git diff'? और git format-patch man देखें)

5

आपका प्रक्रिया लगभग पूर्ण है। शुरुआती क्लोन पर एकमात्र चीज गायब --mirror पैरामीटर थी।

# create the private repo 
ssh private-server 
mkdir -p /path/to/shared/repos 
git init --shared={whatever makes sense for your environment} /path/to/shared/repos/internalrepo.git 
exit 
# go to github.com and make the public repo readonly 
# create a local mirror 
git clone --bare --mirror $Github-URL github.git 
# now the local repo github.git contains all the stuff from the github repo 
cd github.git 
git push --mirror $Private-URL 
# Tell all developers to execute `git remote set-url origin $Private-URL` 
# Done 

मैं GitHub रेपो में परिवर्तन के लिए खुला छोड़ नहीं होगा, क्योंकि यह परियोजना जो रेपो अब सही रेपो है में हर किसी को स्पष्ट नहीं किया जाएगा। तुम अब भी यह कर सकते हैं, यदि आप सर्वर-रेपो

ssh private-server 
cd /path/to/shared/repos/internalrepo.git 
git remote add --mirror github $Github-URL 

और उसके बाद नियमित रूप से (एक क्रॉन जॉब में की तरह)

git fetch github # get new commits from github 
git remote prune github # drop branches, which are now deleted in the github repo 

संपादित करें पर चलने

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

+1

रुडी, महान जवाब! हालांकि यह मानता है कि निजी रेपो एक मशीन पर है जहां मेरे पास खोल/क्रोंटैब है। मेरे मामले में निजी रेपो एक "गीथब एंटरप्राइज़" उदाहरण पर है जो फ़ायरवॉल के अंदर है। गिट और वेबसाइट के माध्यम से मुझे निजी भंडार की कोई सीधी पहुंच नहीं है। – Mojo

+0

मुझे अभी तक जीएचई के लिए समाधान देखने को मिला है। जीएचई वेबसाइट पर भी कुछ चर्चा हटा दी गई थी। – Shane

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