如何编写 git 命令来分离历史文件?
How to write git commands to separate history file?
我想阻止 git
命令写入 $HISTFILE
,而是在它们自己的文件中跟踪它们。
我希望所有非git的命令都写入$HISTFILE
,所有匹配"git*"
的命令都写入~/.git_history
。
这是一个想法:
使用 HISTIGNORE
shell 变量从正常命令历史记录中过滤掉所有 git
命令。
创建一个名为 git
的 shell 函数,将行 git $@
附加到 ~/.git_history
... 然后执行 /usr/bin/git "$@"
。
但我认为这不是个好主意。正如@evolutionxbox 指出的那样,如果您过滤掉所有 git
命令,您将无法完成 git
命令的历史记录。 (我会讨厌那个...)
并且这种方法存在一个重大缺陷。你的假 git "history" 文件将只包含 shell 扩展后的 git
命令的命令参数。您不会记录展开的内容,也不会记录任何重定向或管道。
FWIW,我认为 bash
无法将历史列表的不同部分写入不同的文件。所以上面的内容可能会尽可能好......除非你准备修改 bash
本身。
将以下功能添加到您的 .bashrc
(或 .bash_login
,如果您使用的是 Mac)并重新启动终端。
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 命令的日志。您不能使用 ↑ 或 ctrlR 来取回输入的 git 命令——不是即使在同一会话中。
我想阻止 git
命令写入 $HISTFILE
,而是在它们自己的文件中跟踪它们。
我希望所有非git的命令都写入$HISTFILE
,所有匹配"git*"
的命令都写入~/.git_history
。
这是一个想法:
使用
HISTIGNORE
shell 变量从正常命令历史记录中过滤掉所有git
命令。创建一个名为
git
的 shell 函数,将行git $@
附加到~/.git_history
... 然后执行/usr/bin/git "$@"
。
但我认为这不是个好主意。正如@evolutionxbox 指出的那样,如果您过滤掉所有 git
命令,您将无法完成 git
命令的历史记录。 (我会讨厌那个...)
并且这种方法存在一个重大缺陷。你的假 git "history" 文件将只包含 shell 扩展后的 git
命令的命令参数。您不会记录展开的内容,也不会记录任何重定向或管道。
FWIW,我认为 bash
无法将历史列表的不同部分写入不同的文件。所以上面的内容可能会尽可能好......除非你准备修改 bash
本身。
将以下功能添加到您的 .bashrc
(或 .bash_login
,如果您使用的是 Mac)并重新启动终端。
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 命令的日志。您不能使用 ↑ 或 ctrlR 来取回输入的 git 命令——不是即使在同一会话中。