Можно ли указывать пути перед другими параметрами в журнале git?

Я хочу создать псевдоним 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>. Я также создал для них псевдонимы, но они выходят за рамки данного вопроса.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

lolst = "!f() { git lol --name-status \"$@\" -- $(git diff --staged --name-only); }; f"

Чтобы выполнить переупорядочение, вам необходимо определить и вызвать функцию оболочки для управления списком аргументов, если вы хотите, чтобы остальные аргументы находились где угодно, но не в конце, куда их помещает вставка псевдонимов Git.

Нет необходимости переводить символы новой строки, разделение слов оболочки рассматривает пробелы как разделители аргументов, а символы новой строки являются пробелами.

Я ожидаю, что кто-то, кто знает дубликат этого вопроса, скоро придет и закроет его как дубликат, это нормально.

Спасибо вам обоим! Оба ответа (этот и @tmaj) делают свое дело, и я не видел ограничений. Ответ @tmaj выглядит более читабельным, и в нем больше знаний. Я приму другой ответ, но оба хороши.

donquixote 29.08.2024 03:42

Что касается возможного дубликата: в конце концов, это будет еще одна точка входа для людей, чтобы найти то, что они ищут.

donquixote 29.08.2024 03:44
Ответ принят как подходящий

xargs должен быть в состоянии помочь здесь.

Поскольку имена файлов идут последними в журнале git, должно работать следующее:

[alias]
logst = "!git diff --staged --name-only | xargs git log"

Теперь мы можем добавить другие параметры журнала git. Например:

git logst --pretty=online -n 10

Просто имейте в виду, что если количество проиндексированных файлов велико (или имена файлов очень длинные), то xargs будет запускаться git log более одного раза.

j6t 29.08.2024 07:15

возможно, это имеет отношение к ОП: xargs также имеет опцию -r | --no-run-if-empty, чтобы вообще не запускать git log, если у вас нет промежуточного различия.

LeGEC 29.08.2024 08:47

Другие вопросы по теме