CD с литералом против переменной приводит к тому, что git либо обнаруживаем, либо нет - PullRequest
0 голосов
/ 30 августа 2018

Это может быть очень простой вопрос, хотя все ответы, которые я мог найти для него, были «установить git» или «находиться в каталоге git». Насколько я вижу, оба из них уже решены, но моя проблема сохраняется. Хотя решение может быть тривиально решено путем отказа от поведения по умолчанию без ввода данных, мне любопытно, какое неясное (или основное) поведение вызывает это.

Вопрос [Git через Пакет]

Допустим, у меня есть git-репо в "C: \ RepoBase", среди прочих возможных, но это main репо, к которому я хочу по умолчанию. Не обсуждая дальнейшие функции, сценарий будет либо CD в место, указанное в качестве ввода, либо в путь по умолчанию, если ввод не предоставлен, а затем перейдет к получению имени текущего коммита заголовка.

:: Go to the repo in question
if [%1]==[] (
    cd C:\RepoBase
) else (
    cd %1
)
:: Get name of current branch
FOR /F "tokens=*" %%g IN (
    'call git rev-parse --abbrev-ref HEAD'
) do (
    SET CurrentBranch=%%g
)

Это решение работает . Однако, если я хочу получить несущественное преимущество от использования имени пути, в который я перешел позже, без необходимости повторного использования условного выражения, даже несмотря на то, что было бы возможно получить имя каталога после перехода в него, Я пытаюсь установить переменную для использования в качестве пути. Это делает CD в каталог нормально, но из того же места, что и вышеприведенный фрагмент, вызовы git из приведенного ниже фрагмента приводят к «не распознанному». Почему?

:: Go to the repo in question
SET PATH=%1
if [%1]==[] (
    SET PATH=C:\RepoBase
) 
cd "%PATH%"
:: Get name of current branch
FOR /F "tokens=*" %%g IN (
    'call git rev-parse --abbrev-ref HEAD'
) do (
    SET CurrentBranch=%%g
)

1 Ответ

0 голосов
/ 30 августа 2018

%PATH% - системная переменная, в которой хранятся каталоги, в которых Windows ищет исполняемые файлы, поэтому вам не всегда нужно вызывать полный путь ко всему. Вы написали поверх него, поэтому для вещей, которые обычно не требуется указывать полный путь, теперь требуется полный путь.

Измените имя вашей переменной на что-то другое, например REPO_PATH.

...