2009-10-12 10 views
5

मैं गिट गलत का उपयोग कर रहा हूं। मैं इसे सही उपयोग करना चाहता हूं। है कि मैं करने के लिए प्रतिबद्ध है और पर परीक्षणएक गिट स्रोत पेड़ को धक्का देना, न सिर्फ एक भंडार

यहाँ से, मेरे विकास मशीन पर एक Git भंडार,:

यहाँ मैं क्या मिल गया है है।

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

मैं जो करना चाहता हूं वह गिट रिपोजिटरी में एक दृश्य होना है जिसमें हमेशा स्रोत फ़ाइलों का नवीनतम संस्करण होता है (कुछ शाखा या कुछ टैग के साथ)।

मैं क्या कर सकता हूं वेब सर्वर पर एक और (गैर-बेयर) गिट भंडार बनाने के लिए, और प्रत्येक धक्का के बाद मैन्युअल खींचें, लेकिन मैं प्रत्येक वेब-सर्वर में लॉग इन करने से बचने की उम्मीद कर रहा था समय मैं एक गिट धक्का करता हूँ।

क्या दूरस्थ रूप से करने का कोई तरीका है "वेब-सर्वर पर धक्का दें और इसकी चेक-आउट फ़ाइलों को रीफ्रेश करें, अगर मैं वादा करता हूं कि मैंने वेब सर्वर पर किसी भी फाइल को संपादित नहीं किया है"?

या क्या मैं बस इतना गलत कर रहा हूं कि आप मुझे थप्पड़ मारना चाहते हैं? :-)

उत्तर

7

मैं आमतौर पर एक फ़ाइल .git साथ एक गैर-नंगे भंडार बनाने/हुक/युक्त बाद प्राप्त

#!/bin/sh 
cd .. 
env -i git reset --hard 

यह फ़ाइल निष्पादन योग्य होनी चाहिए और एक शाखा को चेक आउट किया जाना चाहिए।

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

गिट अब एक चेतावनी प्रदर्शित करता है जब आप चेक आउट शाखा को दबाते हैं (और भविष्य में रिलीज़ में इसे अस्वीकार कर देंगे)। इससे बचने के लिए आप दूरस्थ भंडार पर इस config सेट कर सकते हैं:

git config receive.denyCurrentBranch ignore 

आप इस भंडार पर काम कर सकते हैं, लेकिन आप अपने परिवर्तन धक्का इसे करने के लिए किया जाता है से पहले प्रतिबद्ध होना चाहिए। http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6-544f4834cda3

7

hooks जो भी आप खोज रहे हैं हो सकता है।

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

1

मैं ऐसी बातें एक नंगे भंडार (एक उपयोगकर्ता खाते के अंदर) और एक साझा भंडार है जो वेब की जड़ है के लिए उपयोग करें:

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

वेबसर्वर से पढ़ने/लिखने के लिए, मेरा गिट-उपयोगकर्ता समूह www-data में भी है और वेब रूट निर्देशिका chmod ug + rwx था, g + s तो ​​नई बनाई गई फ़ाइलों को स्वामित्व मिलेगा समूह।umask सुनिश्चित करें कि समूह/लेखन पहुँच क्योंकि Git डिफ़ॉल्ट umask जो आम तौर पर 0022 है का उपयोग करता है पढ़ा है बनाता है (प्रलेखन config में एक खुद umask का उपयोग कर के बारे में कुछ कहते हैं, लेकिन यह मेरे लिए काम नहीं किया)

#!/bin/bash 
# post-update hook 

WEB_DIR="/var/www/myweb" 
pushd $WEB_DIR > /dev/null 
export GIT_DIR="$WEB_DIR/.git" 
umask 0007 
git pull 
popd > /dev/null 
संबंधित मुद्दे