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