2010-01-06 14 views
13

के लिए हुक्स क्या मैं "पुल"/"पुश" आईएनजी से git-svn प्रबंधित भंडार में हुक सेट कर सकता हूं?गिट-एसवीएन

स्थिति यह है कि मेरे पास Google Code पर एक प्रोजेक्ट होस्ट है, और स्थानीय कार्य प्रतिलिपि प्रबंधित करने के लिए गिट का उपयोग करें। मैं कुछ हुक सेट करना चाहता हूं ताकि git svn fetch और git svn dcommit के साथ एसवीएन रिपोजिटरी से डेटा को चेक/आउट करने पर, मैं प्रतिबद्धता में कुछ संशोधन कर सकता हूं। चूंकि मैं एसवीएन रिपॉजिटरी होस्ट नहीं करता हूं, इसलिए मैं सर्वर की तरफ हुक सेट नहीं कर सकता।

क्या कोई हुक मैं उपयोग कर सकता हूं? या क्या एक सामान्य शाखा को "चिह्नित" करने का कोई तरीका है, ताकि उस शाखा पर git pull और git push बदले में एक एसवीएन भंडार से/बाहर की जांच कर सके, इसलिए सामान्य गिट हुक का उपयोग किया जा सकता है?

अग्रिम धन्यवाद।

उत्तर

9

जैसा कि this thread द्वारा दिखाया गया है, आप सबवर्सन पक्ष पर हुक कर सकते हैं जो वास्तव में कुछ मानदंडों के आधार पर आपके git svn dcommit को अस्वीकार कर सकता है।

लेकिन यदि आपको गिट पक्ष पर गिट हुक की आवश्यकता है, तो मैं एक इंटरमीडिएट bare Git repository (आसान पुश/पुल के लिए बेयर) स्थापित करने की अनुशंसा करता हूं।
कि नंगे रेपो पर, आप के रूप में "how do I deploy multiple branches to different directories via git push?" में दिखाया गया है, किसी भी हुक आप की जरूरत हो सकता है (नहीं SVN के बारे में लेकिन सिर्फ विस्तार एक अतिरिक्त रेपो के एक समान सेटअप करने के लिए यहाँ)

  • अगर मध्यवर्ती रेपो को मान्य अपने धक्का, यह git svn dcommit ट्रिगर कर सकता है।
  • यह git fetch अनुरोध पर भी git svn fetch पर ट्रिगर कर सकता है और आगे बढ़ने के लिए अपने git fetch को अनुमति देने से पहले इसे सत्यापित कर सकता है।

(2 साल बाद)

David Souther (अप्रैल 2012) his blog में एक समाधान

समाधान मैं विभाजन सिर के साथ एक भंडार है का प्रस्ताव है। अधिकांश समय, मध्यवर्ती भंडार में एक खाली कामकाजी निर्देशिका होगी। जब कोई धक्का होता है, तो खाली शाखा में लौटने से पहले, यह मास्टर की जांच करेगा, बिल्ड को सत्यापित करेगा, और svn पर धक्का देगा।

हम दो शाखाओं के साथ एक मध्यवर्ती गिट रेपो स्थापित करने जा रहे हैं।

  • गुरु अभी भी SVN रेपो को इंगित करेंगे,
  • और नई शाखा stage हमें कार्यशील निर्देशिका स्वच्छ और नीचे की ओर परिवर्तन के साथ सिंक में रख देंगे।

बाहर चेक his gist

+0

शानदार के उपयोग के लिए सक्षम बनाता है! एक मध्यवर्ती भंडार मेरी समस्या का समाधान करेगा। लेकिन मैं यह देखने के लिए कुछ दिनों के लिए खुला प्रश्न रखना चाहता हूं कि क्या एक और अधिक सुरुचिपूर्ण समाधान है :) – iamamac

+0

@lamamac: बिल्कुल। यही एक बक्षीस है;) – VonC

+0

"यह एक गिट फ़ेच अनुरोध पर भी हो सकता है, एक गिट svn fetch को ट्रिगर कर सकता है और इसे सत्यापित कर सकता है" - आप इसके लिए किस हुक का उपयोग करेंगे - मैं गिटूक में कुछ भी स्पष्ट नहीं देख सकता क्लाइंट खींचने का प्रयास करते समय सर्वर पर ट्रिगर किया जाए। – Greg

0

कार्यों में एक गिट-रिमोट-सीवी remote helper है; संभवतः कोई svn के लिए वही करेगा। रिमोट ऑपरेशंस के लिए सामान्य हुक इन सहायकों को कॉल करने से पहले और बाद में बुलाया जाना चाहिए।

3

https://github.com/hkjels/.dotfiles/blob/master/zsh/git-svn.zsh

आप zsh उपयोग करते हैं, मेरा मानना ​​है कि इस Git-svn के लिए एक अच्छा साथी है। बस अपने हुक को .git/hooks में डालें और svn- के साथ कमांड को उपसर्ग करें।

जैसे ".git/हुक/उत्तर svn-रिबेस"

स्क्रिप्ट भी उपनाम

+0

किसी ने इस बैश संस्करण को इस zsh स्क्रिप्ट के आधार पर यहां बनाया है: https://github.com/rkitover/git-svn-hooks – tutuDajuju