Какие $VARIABLES можно передать внешнему инструменту из git-gui?

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

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

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

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

3 ответа

Решение

При взгляде на git-gui Источники, я нахожу (нет в man-странице git-gui):

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

Я личный продлил 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. глобальные выбранные пути

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

  1. файлы, содержащие пробелы

для размещения файлов, содержащих пробелы, используйте "${FILENAMES[@]}" вместо обычного $FILENAMES.

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

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

Другие вопросы по тегам