2011-04-24 10 views
37

मैं एक दूरस्थ सर्वर पर स्थापित करने के लिए सलाह दी गई थीगिट हुक कैसे सेट करें ताकि ssh: //[email protected]/~/bar.com.git पर धक्का देने के बाद, यह ~/bar.com पर जायेगा और एक गिट पुल करेगा?

foo.com/~/bar.com  # live webpage content 
foo.com/~/bar.com.git # a bare repo 

हां, तो अपने स्थानीय मशीन से, मैं एक

git push 

पूरा कर सकते हैं और यह रिमोट मशीन पर foo.com/~/bar.com.git करने के लिए धक्का होगा (पथ ssh://[email protected]/~/bar.com.git

कैसे एक हुक जोड़ा जा सकता है, एकताकि धक्का के बाद, दूरस्थ सर्वर है जाएगा cd ~/bar.com और हैताकि सभी सामग्री अपडेट हो (स्थानीय मशीन के समान)? (मर्क्युरियल के लिए की तरह git update चलाने के लिए कोई ज़रूरत नहीं?)

(इस Cannot git clone a folder on a server and then edit and git push? से संबंधित है अभी मैं foo.com और cd ~/bar.com को SSH और वहाँ प्रतीक्षा करें और एक git pull कर सकते हैं जब भी बाद एक git push स्थानीय मशीन से है, लेकिन यह था यह स्वचालित रूप से करने के लिए अच्छा हो)

अद्यतन: अगर आप विशिष्ट विवरण जानते हैं और इसे कैसे करें, तो कृपया केवल एक उत्तर पोस्ट करें। यदि आप यहां पहले या दूसरे Google परिणाम को पोस्ट करते हैं और पोस्ट करते हैं, तो यह मदद नहीं करेगा।

अद्यतन 2: मैं ~/bar.com.git/hooks के पास गया और सामग्री के साथ एक नई फ़ाइल post-receive जोड़ें:

#!/bin/bash 

cd ~/bar.com 
git pull ../bar.com.git master 

और भी chmod 755 post-receive, और अगर मैं स्थानीय मशीन पर एक फ़ाइल को संपादित करें, और तब git com -m "ok" और git push , यह रिमोट मशीन के फ़ोल्डर ~/bar.com

उत्तर

55

में परिवर्तन नहीं करता है, इसके लिए आप ~/bar.com.git रेपो में post-receive हुक जोड़ सकते हैं। ऐसा करने के लिए इस ~/bar.com.git/hooks/ निर्देशिका के लिए सामग्री के साथ एक निष्पादन योग्य फ़ाइल post-receive जोड़ें:

#!/bin/sh 

unset $(git rev-parse --local-env-vars) 
cd ~/bar.com 
git pull 

यकीनpost-receive फ़ाइल निष्पादन योग्य बिट्स है बनाओ (उदाहरण, 755।)।

अब जब भी ~/bar.com.git रेपो पर कुछ धक्का दिया जाता है, तो ~/bar.com रेपो स्वचालित रूप से अपडेट हो जाता है।

भी देखें

को समझने के लिए क्यों कुछ वातावरण चर unsetting आवश्यक है।

+1

मुझे लगता है कि मैं कुछ इस तरह पता है, लेकिन कैसे? विवरण क्या हैं? आप यह भी कह सकते हैं कि गिट बुक खरीदें और जवाब –

+2

'पोस्ट-प्राप्त' बस एक शेल स्क्रिप्ट है। आप वहां कुछ भी डाल सकते हैं। – troelskn

+0

कृपया अद्यतन 2 –

1

मैं निम्नलिखित post-update लिपि (सुनिश्चित करें कि आप उस पर निष्पादन सा सेट बनाने) का उपयोग करें:

#!/bin/sh 
rm -rf ~/public_html/xxx 
git-archive --format=tar --prefix=xxx master | tar x -C ~/public_html 

यह बात करता है, लेकिन वहाँ एक छोटी खिड़की है जब साइट उपलब्ध नहीं है। git pull सीधे आपके ~/bar.com में गिट की .git निर्देशिका का पर्दाफाश करेगा, इसलिए सुनिश्चित करें कि आप इसे अपने http सर्वर में अवरुद्ध कर दें, या .git निर्देशिका पदानुक्रम में कहीं अधिक उच्च रखें, यानी। की तरह कुछ:

~ 
\ 
    - repo 
    \ 
    - .git 
    - bar.com 
     \ 
     - your content 
+3

आप पूरी निर्देशिका को हटाते हैं और इसे फिर से बनाते हैं? क्या होगा यदि निर्देशिका 300 एमबी है और आपने जो कुछ किया वह 1 लाइन परिवर्तन था? पूरे 300 एमबी फिर से करें? –

+0

यह मेरे लिए काम करता है (मेरी साइट काफी छोटी है)। आपके मामले में 'गिट पुल' दृष्टिकोण निश्चित रूप से बेहतर होगा। यह भी ध्यान रखें: कोई रेपो नहीं है जिसके लिए आप धक्का देते हैं और उसके आगे एक और दूसरा जो पहले से खींचता है। यह अधिक सिर्फ एक रेपो के लिए धक्का और यह अपने आप उसकी सामग्री के लिए समझदार लगता है (इस तरह से काम करता था Git, लेकिन वे कहते हैं कि बदल गया है। IIRC वापस व्यवहार आप की इच्छा होगी पर वापस लौटने के लिए कुछ विकल्प भी नहीं है।)। – wolf

+0

तुम भी एक अस्थायी स्थान में संग्रह चेकआउट और "काम" निर्देशिका के साथ यह rsync सकता है। –

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