Git: Разобрать имя ветви из вывода консоли? - PullRequest
0 голосов
/ 13 марта 2020

Я надеюсь ссылаться на ветку вместо того, чтобы вводить ее имя. Я предполагаю, что "ссылка по номеру" является наиболее вероятным маршрутом.

Но я не могу понять, как разобрать имя ветви из вывода команды branch в оболочке Windows CMD.

Справочная информация: В моем рабочем процессе Git для Windows мне часто нужно извлекать или объединять ветви нескольких других. Я знаю, что автозаполнение возможно, но оно работает только в некоторых оболочках и все еще медленнее, чем работа. Я хотел бы напечатать эти типы вещей, где $ - это специальная ссылка, а не абсолютное имя ветви:

git checkout $1       #BIGGEST WISH#   # check out the most recent check-in
git merge $moderation                  # merge a frequently used "origin/team_moderation"
git merge $latest                      # merge the latest branch committed

Пока я могу получить список ветвей, отсортированных по дате фиксации :

cmd_prompt> git branch -r --sort=-committerdate --no-color
.gitconfig> br = !"f() { git fetch -p  &&  git branch -r --sort=-committerdate $@; }; f"  # shows remote branches, -a would show all

Но мои усилия по извлечению названий веток все зашли в тупик.

  1. Я пытался " for / F ": проанализировать список ветвей, перейдя к строке 2, получить второй токенет после этого токена:>
cmd_prompt> @for /f "skip=2 tokens=2 delims=>" %a in ('git branch -r --sort=-committerdate --no-color') do @echo %a
cmd_output> origin/master

Как показано, эта команда работает в окне CMD. Но я не могу заставить его работать в моем файле .gitconfig:

.gitconfig> checkoutnumber = !"f() { 'for /f "skip=2 tokens=2 delims=>" %%a in ('git branch -r --sort=-committerdate --no-color') do @echo %%a'|git checkout ; }; f"

cmd_prompt> git checkoutnumber 2
cmd_output> environment: for /f skip=2 tokens=2 delims=> %%a in (git: No such file or directory

Я пробовал for.. |git checkout и `vs. 'и \" ... не могу сделать его счастливым или увидеть что это видение.

...

Я пытался findstr : распечатать список, добавить номера строк впереди и найти номер строки. Может быть, потом убрать номер строки, если я смогу заставить ее работать ...
cmd_prompt> git branch -r --sort=-committerdate --no-color|findstr /n ^^|findstr "^[2]:"
cmd_output> 2:  origin/master

Как вы можете видеть, этот вид работает в командной строке, чтобы вернуть 2-ю строку (хотя она имеет номер строки спереди). Но я, кажется, не могу помассировать специальные символы достаточно, чтобы угодить .gitconfig:

.gitconfig> checkoutnumber = !"f() { git branch -r --sort=-committerdate --no-color|findstr /n |findstr \"^[$1]:\"|git checkout   &&  git st| xargs echo $1; }; f"

cmd_prompt> checkoutnumber 2
cmd_output> FINDSTR: Cannot open ^^
cmd_output> Your branch is up to date...

...

Другие варианты : я рассмотрел git - bash, или делал пакетные скрипты, или использовал другие языки, такие как Python / Perl / et c. Это тоже было бы ценно, но я бы выбрал второй вариант ... я бы предпочел "минимальную настройку". Я использую git версию 2.19.1. windows .1 в окне Windows 10 CMD, какую оболочку я в настоящее время предпочитаю Git - bash (пока я не изменю свой рабочий процесс). Когда я меняю рабочие процессы и инструменты, возможно, я могу использовать оболочку git - bash и пытаться использовать sed, grep, xargs или что-то еще. Не проще ли вывести список веток в файл и запустить cmd для его анализа, а затем удалить файл?

Изменить Git : Я немного искал, как сделать запрос на улучшение до Git, но звучало так, будто мне нужно было либо написать его самому, либо убедить достаточно других, чтобы сделать то, чего у меня нет на сегодня.

У кого-нибудь есть лучший способ получить или использовать Git ссылки, подобные этим?

...