2009-08-28 13 views
6

यह सम्मेलन, सर्वोत्तम प्रथाओं और/या व्यक्तिगत वरीयताओं के बारे में एक प्रश्न हो सकता है:गिट अधिकार का उपयोग (निजी रेपो वेबसाइट कोड के लिए)?

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

यह जानकर कि गिट को केंद्रीय भंडार की आवश्यकता नहीं है, मैंने सोचा: अच्छा, मेरा वर्कस्टेशन और सर्वर दो नोड्स हैं, और मैं बस अपने वर्कस्टेशन से सर्वर पर परिवर्तन धक्का दूंगा।

जब मैं शुरू कर दिया, कोड केवल सर्वर पर था, इसलिए मैं:

  1. सर्वर पर: git init
  2. कार्य केंद्र पर: git clone [email protected]:path/to/repo
  3. खुशी से परिवर्तन किए हैं और कार्य केंद्र पर स्थानीय स्तर पर
  4. प्रतिबद्ध : git push [email protected]:path/to/repo

मुझे अजीब परिणाम मिल गए। मेरे पास फाइलें स्थानीय रूप से सर्वर पर दिखाई दीं, लेकिन मौजूदा फ़ाइलों में परिवर्तन प्रतिबिंबित नहीं हुए थे।

फिर मैंने चेक आउट की गई दूरस्थ शाखा को धक्का देने के खिलाफ चेतावनी पढ़ी। इसलिए नए सेटअप है:

  1. Ran git clone --bare एक नंगे भंडार
  2. मेरे सर्वर पर नंगे भंडार रखो (~/repos/mysite.git - नहीं सार्वजनिक फ़ोल्डर) बनाने के लिए
  3. कोड स्थानीय और: git push [email protected]:repos/mysite.git
  4. सर्वर पर : git pull ~/repos/mysite.git नवीनतम

इस सही है पाने के लिए? क्या यह तार्किक है? क्या आप ऐसा करेंगे?

उत्तर

4

आपका नया सेटअप सर्वर रिपॉजिटरी सेट करने का सही तरीका है।

अधिक जानकारी के लिए प्रो गिट पुस्तक पर Getting Git on a Server अध्याय देखें।

+1

विशेष रूप से मैं जो कर रहा था उसके लिए एक अध्याय guh। मैं अधिक गिट प्रश्न पूछने से पहले प्रो गिट पढ़ूंगा ... – EMiller

+0

यह एक अच्छा पढ़ा है। मज़े करो :) – spatz

5

कोई फर्क नहीं पड़ता कि आप क्या करना चुनते हैं, तो आप इसे git hooks का उपयोग करके थोड़ा सा स्वचालित करना चाहेंगे। हुक स्क्रिप्ट का एक सेट है जो कुछ घटनाओं पर गिट निष्पादित करेगा। यहां प्रासंगिक एक पोस्ट-अपडेट हुक (सर्वर के भंडार में) है। एक सामान्य रेपो में, हुक .git/hooks में हैं, इसलिए एक नंगे रेपो में वे hooks में हैं। उस निर्देशिका में शायद वर्तमान में कई उदाहरण हुक स्क्रिप्ट शामिल हैं (हाल के संस्करणों में *.sample नामित)। आपको post-update नामक एक बनाना होगा, जिसमें सर्वर को धक्का देने के बाद आप जो भी कदम उठाएंगे (उदा। अन्य रेपो को सीडी और पुल निष्पादित करें)।

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

git --work-tree=/path/to/checkout-dir --bare reset --hard 

यह Git बताता उचित स्थिति में रीसेट करने के लिए, काम करने के रूप में दिया पथ का उपयोग निर्देशिका, लेकिन ध्यान में रखते हुए कि भंडार वास्तव में बेकार है। मैंने व्यक्तिगत रूप से पहले इस तरह की चीज नहीं की है, लेकिन ऐसा लगता है कि यह मेरे छोटे परीक्षण पर काम करता है!

एक नोट: यदि आप तय करते हैं कि आप किसी भी चेक-आउट शाखा में धक्का देना चाहते हैं (केवल अगर सर्वर पर रेपो कभी भी किसी भी चीज़ के लिए उपयोग नहीं किया जाएगा, लेकिन फाइलों की प्रतिलिपि को जांचने और जांचने के लिए) .. यदि आप इस बारे में पूरी तरह से निश्चिंत हैं, तो आप सर्वर पर gitconfig में false.denyCurrentBranch को गलत पर सेट कर सकते हैं, सर्वर पर git reset --hard निष्पादित करें, इसकी कार्यशील निर्देशिका को राज्य में मजबूर करना चाहिए।

2

पढ़ें "क्यों नहीं होगा मैं "गिट पुश" के बाद रिमोट रेपो में बदलाव देखता हूं? " GitFaq (गिट विकी पर) में।

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