如何编写git命令来分隔历史文件?

时间:2019-03-26 10:41:37

标签: linux bash git dotfiles

我想停止将git命令写入$HISTFILE,而是在自己的文件中跟踪它们。

我希望所有非git命令都写入$HISTFILE,所有与"git*"匹配的命令都写入~/.git_history

2 个答案:

答案 0 :(得分:4)

这是一个主意:

  1. 使用HISTIGNORE shell变量从正常的命令历史记录中过滤掉所有git条命令。

  2. 创建一个名为git的shell函数,该函数将行git $@附加到~/.git_history ...然后执行/usr/bin/git "$@"

但是我认为这不是一个好主意。正如@evolutionxbox指出的那样,如果您滤除所有git命令,则将无法完成git命令的历史记录。 (我会讨厌那个……)

这种方法存在一个重大缺陷。伪造的git“ history”文件在外壳展开后仅包含git命令的命令参数。您将不会记录扩展的内容,也不会记录任何重定向或管道。


FWIW,我认为bash不能将历史记录列表的不同部分写入不同的文件。因此,以上内容可能会很不错……除非您准备自己修改bash

答案 1 :(得分:3)

将以下功能添加到.bashrc(如果使用Mac,则为.bash_login),然后重新启动终端。

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

当您在shell中使用git时,将改为调用此函数。

  • 第一行提取git命令的确切方式是将其存储在.bash_history中(包括未扩展的变量,引号等)并将其附加到~/.git_history
  • 第二行从bash的常规历史记录中删除git命令。
  • 最后一行照常执行您的git命令。

如注释中所述,.git_history仅用作输入的git命令的日志。您不能使用 ctrl R 取回输入的git命令-即使在同一会话中也是如此。