Какие $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
кажется, разделяет аргументы в пространстве и избегает каждого аргумента.
Два замечания к предыдущему решению:
- глобальные выбранные пути
чтобы отправить непустую команду $FILENAMES в команду, необходимо объявить selected_paths глобальными
- файлы, содержащие пробелы
для размещения файлов, содержащих пробелы, используйте "${FILENAMES[@]}" вместо обычного $FILENAMES.
Вы можете увидеть, как патчи отправляются команде, используя команду printf '\"%s\" ', например:
printf '\"%s\" ' FILENAMES= "${FILENAMES[@]}"