Передача параметра через трубу в bash - PullRequest
2 голосов
/ 11 января 2012

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

В настоящее время: git rm --cached folder/path | rm -rf folder/path | git commit -m '...'

Я бы не хотел повторяться, если это возможно, с путем к папке во второй команде, но я не уверен, как получить folder/path из первой команды.

Это вообще возможно, или я лаю не на том дереве?

Ответы [ 4 ]

0 голосов
/ 12 января 2012

Вам не нужно удалять из индекса и удалять из файловой системы отдельно, git rm предназначен для выполнения и:git commit потому что ни один из них не читается из стандартного ввода в формах, которые вы пытаетесь.Вы можете просто использовать ; для разделения команд.

0 голосов
/ 11 января 2012

Я думаю, что это должно работать:

param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...'

Edit: решение @pholser делает вещи чище, удаляя переменную из окружения с помощью unset Это можно сделать также запустив команды в subshell :

(param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...')
0 голосов
/ 11 января 2012
x=/folder/path && git rm --cached $x | rm -rf $x | git commit -m '...' && unset x
0 голосов
/ 11 января 2012

Тебе не нужно делать конвейер.

rm folder/file
git rm !$
git commit -m "your message"

Изучение оператора bang (!) В bash очень полезно.Повторное указание длинного пути не является лучшим.

Для большей части моего рабочего процесса я могу сойти с рук:

rm path/to/unwanted/file
git add -A # stages ALL changes in the work tree
git commit -m "my message"

Если я исправляю предыдущий коммит, который по ошибкедобавив файл, который мне не нужен, вы можете изменить этот коммит, изменив последний коммит в приведенном выше фрагменте кода на

git commit --amend -C HEAD

. Это позволит повторно использовать сообщение из текущего коммита.

Возможно, вы захотите включить вывод вашего статуса git и то, что вы пытаетесь сделать.

...