1

Я сижу за корпоративным прокси, мне нужно часто переключать прокси git при разработке.

Поэтому я хочу использовать autohotkey для создания скрипта для переключения настроек прокси в git. Но я не могу понять, как это сделать:

Run %comspec% /c ""C:\Program Files\Git\bin\git.exe" "config" "--global" "http.proxy" "http://xxx:8080""
Run %comspec% /c ""C:\Program Files\Git\bin\git.exe" "config" "--global" "https.proxy" "xxx:8080""
;Run, "C:\Program Files\Git\bin\git.exe" config --global http.proxy http://xxx:8080
;Run, "C:\Program Files\Git\bin\git.exe" config --global https.proxy http://xxx:8080

Выше я попробовал, но они не работают. Пожалуйста помоги.

1 ответ1

2

Попытка выложить команды git может быть трудной для отладки ... вот пример кода ...

; need quotes for running inside of cmd (w/ comspec)
; super global to reference it in other functions
global gitExe := quote("C:\Program Files\git\bin\git.exe")

tmpFile := A_Temp . "\gittemp.txt"
fileDelete, %tmpFile%
RunWait, %comspec% /c %gitExe% status > %tmpFile%, %A_ScriptDir%, Hide
FileReadLine, tmpVar1, %tmpFile%, 1
FileReadLine, tmpVar2, %tmpFile%, 2

global WorkingDirectory := "C:\Something"
RunWait, %comspec% /c %gitExe% --global http.proxy http://xxx:8080, %WorkingDirectory%, Hide

Куда....

Quote(text)
{
    return chr(34) . text . chr(34)
}

Вот несколько вещей, которые я делаю для устранения неполадок ...

  1. Помещение команды git в переменную облегчает ее последующее изменение или ссылку
  2. Мне нравится иметь функцию quote() так как использование = смущает меня, и я склонен использовать := чаще
  3. Использование Runwait полезно, если у вас есть последовательные команды для запуска, которые не должны выполняться одновременно
  4. Использование comspec /c полезно, если вам нужно перенаправить вывод скрипта через командную строку, а не использовать полностью автономную команду
  5. Если вам нужно отладить более сложный сценарий, задайте полную команду, которую вы хотите запустить, в переменную, затем спросите пользователя, успешно ли выполнена операция, и, если он выберет нет, скопируйте содержимое в буфер обмена, чтобы вы могли вставить его в командная строка. Таким образом, когда вы добираетесь до чего-то, вы можете проверить, работает ли это, а когда нет, вы открываете окно команд, нажимаете кнопку вставки и видите, почему это не удалось.

т.е.

;---------------------------------------------------------------------------------------------------------
; git_CommitAll()  - ; Commit everything on the current branch using the commit message
;
;---------------------------------------------------------------------------------------------------------
git_CommitAll(commitMsg)
{
    tmpCmd := comspec . " /c " . quote(gitExe . " commit -a -m " . quote(commitMsg))
    RunWait, %tmpCmd%, %WorkingDirectory%, hide   ; change hard-coded folder as needed
    if debug := True ; set this true/false here to use debugging or not
    {
        msgbox,4,,Did command work right?
        IfMsgBox, no
        {
            clipboard := tmpCmd
            msgbox Command has been copied to clipboard`n`n%tmpCmd%`n`nClick OK to continue...
        }
    }

    return True
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .