我正在努力使我使用的 git 命令更有用。我做的一个常见任务是grep
我的git rev-list --all
.我编写了(又名剪切并粘贴另一个 StackExchange 答案)git 命令来为我执行此操作。
~/bin/git-search
:
!/bin/bash
function _search() {
git rev-list --all | (
while read revision; do
git grep -F $1 $revision
done
)
}
_search $1
其输出如下所示:
f26ce56cf6b17401292c494f906b2b6a9071ca75:filename.py:grepped string
我通常会获取这些结果并git show
与提交和文件路径一起运行以查看该文件的特定版本。git show
接受 的输入{COMMIT HASH}:path/to/file
。
我理想的情况是让我的 git 函数在第二个函数所在的位置粘贴一个空格:
,这样我可以更轻松地将 的输出复制并粘贴到git-search
,git show
即:
f26ce56cf6b17401292c494f906b2b6a9071ca75:filename.py grepped string
我想为此使用 BASH,因为我已经在使用 BASH。我最初的解决方案是使用 Python,但这对我来说似乎没有必要。我只是不确定如何在 BASH 中最好地实现这一点。
答案1
sed 's/:/ /2'
这会将第二个:
字符更改为空格。
您可以将其作为函数管道的额外阶段:
#!/bin/sh
git rev-list --all |
while read revision; do
git grep -F "$1" "$revision"
done |
sed 's/:/ /2'
(我实际上删除了该函数,因为它似乎不需要;还要注意变量扩展的引用;哦,它是一个/bin/sh
脚本,因为它没有使用任何bash
特定功能(你的也没有,除了不需要的function
关键字) )