2010-11-10 14 views
22

से गिट क्लोन हम अपने वर्कफ़्लो के लिए Mercurial से Git में माइग्रेट करने की प्रक्रिया में हैं और मेरे पास दो मामूली समस्याएं हैं।स्थानीय से रिमोट

सबसे पहले, क्या स्थानीय भंडार को सीधे खाली रिक्त (एसएसएच) डीआईआर में "क्लोन" करना संभव है?

वर्तमान में जब हम एक नई वेबसाइट बनाते हैं तो हम मूल रूप से हमारे सीएमएस को स्थानीय रूप से क्लोन करते हैं, इसे कॉन्फ़िगर करते हैं और फिर हम इसे केंद्रीय रेपो और वेबसर्वर (hg clone . ssh://[email protected]/www) पर क्लोन करते हैं। इस तरह हमारे पास धक्का/खींचने की तत्काल पहुंच है।

यह मुझे दूसरी समस्या, रिमोट परिनियोजन पर लाता है।

वर्तमान में Mercurial के साथ, मेरे पास रिमोट रिपोज़ में एक साधारण हुक है जो एक परिवर्तन प्राप्त होने पर hg up निष्पादित करता है।

गिट के साथ ऐसा करने के लिए मैंने यहां दिए गए निर्देशों का पालन किया है: http://caiustheory.com/automatically-deploying-website-from-remote-git-repository लेकिन मैं वेबसाइट रूट में .git निर्देशिका रखना चाहता हूं क्योंकि यह Mercurial के मामले में है (यह अपाचे कॉन्फ़िगर द्वारा संरक्षित है और मैं कर सकता हूं सभी खातों के लिए GIT_DIR निर्यात नहीं करें क्योंकि कुछ में एक से अधिक वेबसाइट/रिपोज हैं)।

क्या मूल रूप से रिपो से काम करने वाले डीआईआर को अलग किए बिना एक ही सेटअप होना संभव है?

उत्तर

31

अपने पहले प्रश्न का उत्तर देने के लिए, हाँ, आप कर सकते हैं। मान लें कि दूरस्थ निर्देशिका ssh://[email protected]/home/user/repo है। यह एक गिट भंडार होना चाहिए, इसे git init --bare या scp के साथ बनाएं, स्थानीय repo.git (git clone के साथ बनाया जा सकता है) निर्देशिका दूरस्थ रूप से। फिर करें:

git remote add origin ssh://[email protected]/home/user/repo 
git push --all origin 

यह सभी स्थानीय रूप से मौजूदा शाखाओं को रिमोट रिपोजिटरी में धक्का देगा।

अपने अगले प्रश्न पर जाने के लिए, आपको आदेशों के एक अलग सेट का उपयोग करके एक ही चीज़ करने में सक्षम होना चाहिए। इन का प्रयास करें:

$ cd /var/www # or wherever 
$ mkdir somesite 
$ cd somesite/ 
$ git init 
$ git --bare update-server-info 
$ git config receive.denycurrentbranch ignore 
$ cat > hooks/post-receive 
#!/bin/sh 
git checkout -f 
^D 
$ chmod +x hooks/post-receive 

आप, ज़ाहिर है, ऊपर रिमोट/धक्का आदेशों इस चरण के बाद चलाए जा सकें। ऐसा करने के बाद आपको एक विशिष्ट शाखा की जांच करनी पड़ सकती है, ताकि सर्वर पर "somesite" क्लोन वास्तव में जानता है कि कौन सी शाखा का पालन करना है। तब से, उस भंडार को दबाकर उस शाखा का पुन: चेकआउट ट्रिगर करना चाहिए।

+0

की ओर इशारा करते है "Git पर धक्का ", मैं उस शाखा को निर्दिष्ट करने के लिए उपयोग किया जाता हूं जिसे मैं धक्का देता हूं। तो मेरे मामले में आपका पुश स्टेटमेंट "गिट पुश - मूल मूल मास्टर" – iGbanam

+0

पढ़ेगा यदि आप ऐसा करना चाहते हैं, तो - या git बाहर ले जाएं, वैसे भी उन्हें धक्का देंगे। :) – cdhowie

+0

उत्तर के लिए धन्यवाद। पहला भाग ठीक काम करता है हालांकि मुझे धक्का देते समय वर्तमान शाखा को अपडेट करने के बारे में चेतावनी मिलती है (एक नंगे रेपो जो दूर हो जाती है)। दूसरे भाग के लिए मुझे शायद कुछ याद आ रहा है। "गिट इनिट" के बाद मुझे अंदर जाना पड़ा। अन्यथा अद्यतन-सर्वर-जानकारी काम नहीं करेगी। उसके बाद, पोस्ट-प्राप्त हुक काम करने लगते हैं लेकिन फाइलों को नहीं हटाते हैं, यह केवल उन्हें अनचाहे चिह्नित करता है (अगर रिमोट पर कोई बदलाव नहीं होता है तो एचजी अपडेट मुझे सही स्थिति में लाएगा)। – hlidotbe

4

यह उत्तर अच्छा है लेकिन मैं इसे मेरे लिए काम करने में सक्षम नहीं था। इस लिंक से निम्नलिखित कोड http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/ था। दूरस्थ रन

mkdir my_project.git 
cd my_project.git 
git init --bare 
git-update-server-info # If planning to serve via HTTP 

स्थानीय स्तर पर एक मौजूदा भंडार पहले से ही कम से कम एक है पर पर

git remote add origin [email protected]:my_project.git 
git push -u origin master 

मुझे आशा है कि यह किसी को भी है कि अन्य जवाब के साथ समस्या नहीं थी मदद करता है चलाने कर।

2

hg clone . ssh://[email protected]/www लिए सबसे आसान Git बराबर है:

rsync -avz . ssh://[email protected]/www/reponame 

वास्तव में, मैं इस लाइन के लिए ~/जोड़ लिया है।

alias mirror="rsync -avz . ssh://[email protected]`pwd` --delete" 

अगर आप की तरह/dev या/bin एक विशेष निर्देशिका में होना होता है खतरनाक साबित हो सकता है: bash_aliases कहीं भी किसी भी निर्देशिका दर्पण। सावधान रहें।

22

मैं भी हाल ही में इस मुद्दे में पड़ गए और इसे हल इस प्रकार है:

दूरस्थ सर्वर पर:

1: नामक एक निर्देशिका बनाने/tmp/नंगे
2: कि निर्देशिका
से 3 बदलें : निष्पादित Git init --bare

स्थानीय मशीन पर:

1:
अपना Git परियोजना निर्देशिका को बदलें 2: git दूरस्थ नंगे ssh जोड़ने: // उपयोगकर्ता @ सर्वर/tmp/नंगे
3: Git धक्का -सभी नंगा
4: git दूरस्थ हटाने नंगे

दूरस्थ सर्वर पर:

1 : Git क्लोन/tmp/नंगे/path// अपने/क्लोन

स्थानीय मशीन पर करने के लिए:

1: git दूरस्थ मूल ssh जोड़ने: // उपयोगकर्ता @ सर्वर/path// अपने/क्लोन
को

यह थोड़ा सा शामिल है, लेकिन यह काम करता है और किसी भी अजीब झंडे को सेट करने या गिट को अपने डिफ़ॉल्ट व्यवहार को ओवरराइड करने की आवश्यकता नहीं है। यह इसलिए काफी सुरक्षित है।

+0

चूंकि आपने कहा है कि यह * सुरक्षित * है, मैंने इसे आज़माया। ऐसा लगता है कि यह काम करता है (मेरे लिए)। –

+0

यह मेरे साथ काम किया ... –

1

मैं बेजोड़ फ़ाइलों को हटाकर presto8 पर सहमत हूं और सुधार करता हूं।

rsync -avz . ssh://[email protected]/www/reponame --delete 
0

बस आपको एक विकल्प देने के लिए, आप का उपयोग कर सकते हैं:

git remote set-url origin git://other.url.here 

ये भी काम करता है, तो अपने स्थानीय Git respository, एक और दूरदराज के भंडार

एक अतिरिक्त के रूप
संबंधित मुद्दे