2012-03-23 47 views
9

當我添加一個新工具到git-gui時,對話框顯示我可以使用一些變量傳遞給工具($REVISION$ARGS,$FILENAME)。

是否有任何其他參數是而不是記錄(例如當前repo目錄等)?爲什麼它們不包含在git-guidocumentation

我目前的用例是我有兩個腳本啓用/禁用預先提交鉤子。目前,我必須打開我的Windows資源管理器,然後雙擊有點笨拙的批處理文件。更簡單的方法將是這樣做直接出的git-gui ...

作爲替代(側問題),我也有興趣繞過pre-commit鉤子出git-gui(即提交時通過--no-verify)。

回答

4

當在git-gui sources看,我覺得(在git-gui man page不存在):

  • git-gui.sh
    • $GITGUI_VERBOSE,啓用詳細裝載
    • SSH_ASKPASS,表明我們的實現askpass,如果沒有設置
    • GIT_DIRGIT_WORK_TREE,用於存儲庫設置
+0

我看到'設置的 「用法:$ :: argv0 $ :: $子:: subcommand_args」':也許有一種方法可以傳遞和執行一個子git命令... – VonC 2012-03-23 12:38:49

+0

@eckes正確的,這些是git-gui在啓動時考慮到的變量。然而,'GIT_DIR'和'GIT_WORK_TREE'仍然應該被設置('Tools - > Add')並且被子命令考慮在內。儘管'--no-verify'我什麼都沒有。 – VonC 2012-03-23 13:12:37

3

我個人擴展git-gui對多個文件

tools.tcl文件工作有工具,添加以下兩行

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) 

使用$FILENAMES而不是文件你的工具,並列出將在用空格隔開傳遞(非常有用的創建像工具:rm $FILENAMES)上$FILENAME(和$FILENAMES

注 Git的GUI工具,機制不包含文件的工作空間 我試圖引用的每個文件,通過編寫

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

Console::exec似乎在空間分隔指定參數和逃避每個參數。

+0

+1。聽起來很有趣,除了我在答案中確定的變量之外。 – VonC 2013-08-30 17:18:26

1

兩個音符之前的解決方案:

  1. 全球selected_pa​​ths

發佈非空$ FILENAMES到命令這裏有必要聲明selected_pa​​ths全球

  • 含有空格的文件
  • 發佈包含空格的文件使用「$ {FILENAMES [@]}」而不是純$ FILENAMES。

    您可以看到如何通過使用命令printf'\「%s \」'

    printf的 '\ 「%s \」 的' FILENAMES = 「$ {FILENAMES [@]}」

    相關問題