3zz*_*zzy 7 git grep git-submodules
我在博客上发现了grep项目和子模块:
[alias]
sgrep = "!f() { git grep \"$1\"; git submodule foreach \"git grep '$1'; true\" | grep -B 1 \"$1\"; }; f"
Run Code Online (Sandbox Code Playgroud)
我更新了我~/.gitconfig的包含它,但是当我使用别名时,它说:
fatal: bad config file line 9 in /home/myname/.gitconfig
我究竟做错了什么?
Von*_*onC 14
注意:使用Git 2.12(2017年第一季度),您将不需要任何git submodule foreach技巧.
只是:
git grep -e "bar" --recurse-submodules
Run Code Online (Sandbox Code Playgroud)
参见提交e6fac7f,提交74ed437,提交0281e48,提交4538eef,提交9ebf689,提交f9f4256,提交5688c28(2016年12月16日),并提交4ac9006,提交7241764,提交a1ae484,提交05b458c(2016年12月12日),由Brandon Williams(mbrandonw)提交.
请参阅Johannes Sixt()提交的e9a379c(2016年12月21日).(由Junio C Hamano合并- -在提交55d128a,2017年1月18日)j6t
gitster
grep:可选择递归到子模块允许
grep识别子模块并递归搜索每个子模块中的模式.
这是通过分离进程以递归调用每个子模块上的grep来完成的.仅对已由父项目初始化和检出的子模块进行递归.如果子模块尚未初始化并检出,则只需跳过它.
为了支持现有的多线程基础结构
grep,每个子进程的输出都在strbuf中捕获,以便以后可以按顺序打印到控制台.为了限制创建的theads数量,每个子进程的线程数量都是其父进程的一半(最小值为1),否则我们可能会有一个fork-bomb.
该git grep手册页现在包括:
--recurse-submodules
Run Code Online (Sandbox Code Playgroud)
递归搜索已在存储库中初始化和检出的每个子模块.
当与<tree>选项结合使用时,所有子模块输出的前缀将是父项目<tree>对象的名称.
使用Git 2.14.x/2.15(2017年第3季度)," git grep --recurse-submodules"已经过重新设计,可以跨子模块边界提供更一致的输出(并且无需分叉单独的进程即可完成).
请参阅提交f9ee2fc,提交2184d4b,提交34e2ba0,提交91b8348,提交8fa2915,提交f20e7c1,提交b22e51c,提交4c0eeaf(2017年8月2日),并提交ba43964,提交3f13877(2017年7月18日),由Brandon Williams(mbrandonw)提交.
(由Junio C gitsterHamano合并- -在提交5aa0b6c,2017年8月22日)
这意味着内部--parent-basename <basename>选项git grep不再存在.
确保使用Git 2.21(2019年第一季度),因为已经修复了关于cywin路径的错误:请参阅" Cygwin使用环境变量的相对和绝对路径 ".
一般来说,类似于“ GitConfig: bad config for shell command ”,这可能是因为 ' \' 字符先由 git 解释,然后再在 shell 中执行。
但就您而言,由于周围有双引号,这应该按预期工作。
它确实可以在 Ubuntu 上的 git 1.8.4 上运行。
因此,简化您的.gitconfig并检查如果它包含您的别名(而不是其他任何内容)是否效果更好。
如果确实有效,则问题出在配置文件的其他位置。