2012-03-23 19 views
9

जब मैं git-gui पर एक नया टूल जोड़ता हूं, तो संवाद इंगित करता है कि मैं उपकरण ($REVISION, $ARGS, $FILENAME) पर पास करने के लिए कुछ चर का उपयोग कर सकता हूं।

क्या कोई अन्य पैरामीटर हैं जो दस्तावेज नहीं हैं (उदाहरण के लिए वर्तमान रेपो निर्देशिका, आदि)? git-gui के documentation में वे क्यों शामिल नहीं हैं?

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

एक विकल्प (पक्ष सवाल) के रूप में हो सकता है, मैं भी पूर्व प्रतिबद्ध हुक को दरकिनार में रुचि होगी git-gui से बाहर (अर्थात --no-verify जब करने से पारित)।

उत्तर

4

जब git-gui sources को देखते हुए, मुझे लगता है (git-gui man page में मौजूद नहीं):

  • git-gui.sh:
    • $GITGUI_VERBOSE, askpass के बारे में हमारी कार्यान्वयन सुझाव देने के लिए वर्बोज़ लोड हो रहा है
    • SSH_ASKPASS, सक्षम करने के लिए, अगर कोई भी
    • GIT_DIR और GIT_WORK_TREE, भंडार सेटअप
    • के लिए सेट किया गया है
+0

मैं देख रहा हूँ 'सेट रों" उपयोग: $ :: argv0 $ :: subcommand $ :: subcommand_args "': शायद एक उप गिट कमांड पास करने और निष्पादित करने का एक तरीका है ... – VonC

+0

@ ठीक है, वे लॉन्च समय पर गिट-गुई द्वारा खाते में लिया गया चर है। हालांकि, 'GIT_DIR' और' GIT_WORK_TREE' अभी भी सेट किए जाने चाहिए ('टूल्स -> जोड़ें ') और उप-आदेश द्वारा खाते में लिया जाना चाहिए। मुझे '--no-verify' पर कुछ भी नहीं मिला है। – VonC

3

मैं व्यक्तिगत विस्तारित git-gui एकाधिक फ़ाइलों

tools.tcl फ़ाइल में पर काम कर उपकरण होने के लिए, निम्नलिखित 2 लाइनों

set env(GIT_GUITOOL) $fullname 
set env(FILENAME) $current_diff_path 
>> set env(FILENAMES) [array names selected_paths] 

और जोड़ें:

unset env(GIT_GUITOOL) 
unset env(FILENAME) 
>> unset env(FILENAMES) 

उपयोगके बजाय अपने उपकरण में, और फ़ाइलों की सूची (जैसे उपकरण बनाने के लिए बहुत उपयोगी: rm $FILENAMES) रिक्तियों से अलग पर पारित हो जाएगा $FILENAME (और $FILENAMES) पर

नोट Git GUI उपकरण तंत्र युक्त फाइलों के साथ काम नहीं करता है रिक्त स्थान मैं प्रत्येक फ़ाइल के हवाले से की कोशिश की,

set env(FILENAMES) [string map { \{ \" \} \" } [array names selected_paths]] 

लिख कर लेकिन Console::exec अंतरिक्ष पर आर्ग अलग और प्रत्येक तर्क से बचने के लिए लगता है।

पिछले समाधान करने के लिए
+0

+1। मेरे उत्तर में पहचाने गए चर के अतिरिक्त, दिलचस्प लगता है। – VonC

1

दो टिप्पणियां:

  1. वैश्विक selected_paths

आदेश को गैर खाली $ FILENAMES पोस्ट करने के लिए यह रूप में selected_paths घोषित करने के लिए आवश्यक है वैश्विक

  1. रिक्त स्थान वाली फ़ाइलें

रिक्त स्थान वाली फ़ाइलों को पोस्ट करने के लिए सादा $ FILENAMES के बजाय "$ {FILENAMES [@]}" का उपयोग करें।

आप देख सकते हैं कि pathes आदेश printf का उपयोग कर '\ "% s \"' उदा एक आदेश के लिए भेजा जाता

printf '\ "% s \"' FILENAMES = "$ {FILENAMES [@]}"