Что мешает мне использовать $ _ в конвейере? - PullRequest
2 голосов
/ 29 мая 2019

Команда git branch --list | select-string 2362 дает мне список нескольких ветвей, которые соответствуют шаблону 2362.Я хочу удалить все эти ветви на сервере.

Команда git branch --list | select-string 2362 | git push origin --delete $_ дает мне ошибку fatal: --delete doesn't make sense without any refs, которая является той же самой ошибкой, которую я получаю из команды git push origin --delete.Как будто $ _ пусто, как будто не найдено ни одной ветви, соответствующей шаблону.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

У вас есть пара проблем с тем, что вы пытаетесь сделать. Команда git не принимает входные данные конвейера (насколько я знаю), потому что это не командлет PowerShell.

Также Select-String возвращает объект MatchInfo, поэтому $_ будет содержать не только название ветвей, но и этот объект с его различными свойствами.

Попробуйте это:

(git branch --list | select-string 2362).line | ForEach-Object {
    git push origin --delete $_
}

Остерегайтесь, однако, вы можете получить символ * в одном из имен ветвей, если это текущая ветвь.

0 голосов
/ 30 мая 2019

Я придумал этот «однострочник»:

git branch --list | ? { $_ -like "*2362*" } | Select-Object -first 1 | % {
    git push origin --delete ($_ -replace "[:\*]",  " ").Trim()  
}

Select-Object используется только для удаления одной ветви, конечно, ее можно удалить. Ведущая звезда и : заменяется. Пространства обрезаны.

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...