Как написать команды git в отдельный файл истории? - PullRequest
1 голос
/ 26 марта 2019

Я бы хотел остановить git команды от записи в $HISTFILE и вместо этого отслеживать их в своем собственном файле.

Я ожидаю, что все не-git команды будут записаны в $HISTFILE, а все команды, соответствующие "git*", будут записаны в ~/.git_history.

Ответы [ 2 ]

4 голосов
/ 26 марта 2019

Вот идея:

  1. Используйте переменную оболочки HISTIGNORE для фильтрации всех git команд из обычной истории команд.

  2. Создать функцию оболочки с именем git, которая добавляет строку git $@ к ~/.git_history ..., а затем выполняет /usr/bin/git "$@".

Но я не думаю, что этохорошая идея.Как указывает @evolutionxbox, если вы отфильтруете все команды git, вы не сможете завершить историю для команд git.(Я бы ненавидел , что ...)

И в этом подходе есть существенный недостаток.Ваш фальшивый файл git «history» будет содержать аргументы команды для команды git только после того, как оболочка их расширит.Вы не будете записывать то, что было расширено, и вы не будете записывать какие-либо перенаправления или конвейеры.


FWIW, я не думаю, что bash способен записывать различные части вашего списка историив разные файлы.Таким образом, вышеприведенное может быть настолько хорошим, насколько это возможно ... если только вы не готовы изменить bash.

3 голосов
/ 26 марта 2019

Добавьте следующую функцию к вашему .bashrc (или .bash_login, если вы используете Mac) и перезапустите терминал.

git() {
   fc -nl -0 | cut -c3- >> ~/.git_history
   history -d -1
   command git "$@"
}

Когда вы используете git в вашей оболочке, эта функция будет вызываться вместо.

  • Первая строка извлекает вашу команду git в точности так, как она будет сохранена в .bash_history (включая нерасширенные переменные, кавычки и т. Д.) И добавляет ее к ~/.git_history.
  • Вторая строка удаляет вашу команду git из обычной истории bash.
  • Последняя строка выполняет вашу команду git как обычно.

Как обсуждалось в комментариях, .git_history будет служить только журналом введенных команд git. Вы не можете использовать или ctrl R , чтобы вернуть введенную команду git - даже в том же сеансе.

...