Я хочу создать псевдоним git, в котором часть <path>
является частью псевдонима, но где я все равно могу передавать дополнительные параметры.
В настоящее время это соответствующие псевдонимы в моей конфигурации git:
[alias]
lol = log --graph --decorate --pretty=oneline --abbrev-commit --abbrev=8
lolst = "!git lol --name-status $(git diff --staged --name-only | tr '\\n' ' ')"
# Simpler version just for this Q/A.
logst = "!git log $(git diff --staged --name-only | tr '\\n' ' ')"
Назначение lolst
и logst
— показать историю всех подготовленных файлов. На самом деле это работает так, как задумано.
Теперь я хочу иметь возможность добавлять дополнительные параметры с помощью этих команд.
Например. git lolst -U3
, чтобы показать разницу с каждым коммитом.
Однако это дает мне «фатальный результат: опция '-U3' должна идти перед аргументом, не являющимся опцией».
Понятно, почему это происходит: список файлов должен идти после аргументов.
Как я могу создать псевдоним, чтобы потом добавить дополнительные параметры?
Как только у меня будут идентификаторы коммитов, я смогу сделать git commit --fixup=<commit id>
. Тогда git rebase -ir --autosquash <some ancestor ref>
. Я также создал для них псевдонимы, но они выходят за рамки данного вопроса.
lolst = "!f() { git lol --name-status \"$@\" -- $(git diff --staged --name-only); }; f"
Чтобы выполнить переупорядочение, вам необходимо определить и вызвать функцию оболочки для управления списком аргументов, если вы хотите, чтобы остальные аргументы находились где угодно, но не в конце, куда их помещает вставка псевдонимов Git.
Нет необходимости переводить символы новой строки, разделение слов оболочки рассматривает пробелы как разделители аргументов, а символы новой строки являются пробелами.
Я ожидаю, что кто-то, кто знает дубликат этого вопроса, скоро придет и закроет его как дубликат, это нормально.
xargs
должен быть в состоянии помочь здесь.
Поскольку имена файлов идут последними в журнале git, должно работать следующее:
[alias]
logst = "!git diff --staged --name-only | xargs git log"
Теперь мы можем добавить другие параметры журнала git. Например:
git logst --pretty=online -n 10