Какие $ VARIABLES можно передать внешнему инструменту из git-gui? - PullRequest
10 голосов
/ 23 марта 2012

Когда я добавляю новый инструмент в git-gui, в диалоговом окне указывается, что я мог бы использовать некоторые переменные для передачи в инструмент ($REVISION, $ARGS, $FILENAME).

ЕстьЕсть ли другие параметры, которые не задокументированы (например, текущий каталог репо и т. д.)?Почему они не содержатся в документации git-gui?

Мой текущий пример использования состоит в том, что у меня есть два сценария, которые включают / отключают ловушку перед фиксацией.В настоящее время я должен открыть свой проводник Windows и дважды щелкнуть командные файлы, что немного неуклюже.Более простым способом было бы сделать это непосредственно из git-gui ...

В качестве альтернативы (побочный вопрос), я также был бы заинтересован в обходе ловушки перед фиксацией (то есть, передавая --no-verify, когдасовершать) из git-gui.

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

При просмотре git-gui источников я нахожу (отсутствует в справочной странице git-gui ):

  • git-gui.sh:
    • $GITGUI_VERBOSE, чтобы включить подробную загрузку
    • SSH_ASKPASS, чтобы предложить нашу реализацию askpass, если ни один не установлен
    • GIT_DIRи GIT_WORK_TREE, для настройки хранилища
3 голосов
/ 30 августа 2013

Я персональный расширен 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)

Используйте $FILENAMES вместо $FILENAME в вашем инструменте, и список файлов будет передаваться через пробел (очень полезно для создания такого инструмента, как: rm $FILENAMES)

Примечание к $FILENAME$FILENAMES) Механизм Git GUI не работает с файлами, содержащими пробелы Я попытался процитировать каждый файл, написав

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

Но Console::exec, кажется, разделяет аргументы в пространстве и экранирует каждый аргумент.

1 голос
/ 09 января 2016

Два примечания к предыдущему решению:

  1. глобальные selected_paths

для отправки непустых $ FILENAMES в команду, необходимо объявить selected_paths глобальными

файлы с пробелами

для публикации файлов с пробелами используйте «$ {FILENAMES [@]}» вместо простых $ FILENAMES.

Вы можете видеть, как отправляются патчик команде с помощью команды printf '\ "% s \"' например,

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

...