- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在一个博客上找到这个来 grep 项目和子模块:
[alias]
sgrep = "!f() { git grep \"$1\"; git submodule foreach \"git grep '$1'; true\" | grep -B 1 \"$1\"; }; f"
我更新了我的 ~/.gitconfig
以包含它,但是当我使用别名时,它说:
致命:/home/myname/.gitconfig 中的错误配置文件第 9 行
我做错了什么?
最佳答案
使用 Git 2.12(2017 年第一季度),您将不需要任何 git submodule foreach
把戏。
简单地:
git grep -e "bar" --recurse-submodules
参见 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 (2016 年 12 月 21 日)Johannes Sixt ( j6t
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 55d128a ,2017 年 1 月 18 日)
grep
: optionally recurse into submodulesAllow
grep
to recognize submodules and recursively search for patterns in each submodule.
This is done by forking off a process to recursively call grep on each submodule.Recursion only occurs for submodules which have been initialized and checked out by the parent project. If a submodule hasn't been initialized and checked out it is simply skipped.
In order to support the existing multi-threading infrastructure in
grep
, output from each child process is captured in a strbuf so that it can be later printed to the console in an ordered fashion.To limit the number of theads that are created, each child process has half the number of threads as its parents (minimum of 1), otherwise we potentially have a fork-bomb.
git grep
man page现在包括:
--recurse-submodules
Recursively search in each submodule that has been initialized and checked out in the repository.
When used in combination with the<tree>
option the prefix of all submodule output will be the name of the parent project's<tree>
object.
在 Git 2.14.x/2.15(2017 年第 3 季度)中,“git grep --recurse-submodules
”已被重新设计以提供跨子模块边界的更一致的输出(并且无需 fork 单独的进程即可完成其工作)。
参见 commit f9ee2fc , commit 2184d4b , commit 34e2ba0 , commit 91b8348 , commit 8fa2915 , commit f20e7c1 , commit b22e51c , commit 4c0eeaf (2017 年 8 月 2 日),和 commit ba43964 , commit 3f13877 (2017 年 7 月 18 日)作者:Brandon Williams ( mbrandonw
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 5aa0b6c ,2017 年 8 月 22 日)
这意味着内部 --parent-basename <basename>
git grep
的选项不再存在。
确保使用 Git 2.21(2019 年第一季度),因为有关 cywin 路径的错误已得到修复:请参阅“Cygwin uses relative and absolute path for environment variables”。
实际上,之前 Git 2.23.1/2.24(2019 年第 4 季度),查看工作树文件的“git grep --recurse-submodules
”查看子模块中索引中的内容,相反工作树中的文件数。
已修复。
参见 commit 6a289d4 (2019 年 7 月 30 日)作者:Matheus Tavares ( matheustavares
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 3071797 ,2019 年 8 月 22 日)
grep
: fix worktree case in submodulesRunning
git-grep
with--recurse-submodules
results in a cachedgrep
for the submodules even when--cached
is not used.
This makes all modifications in submodules' tracked files be always ignored when grepping.Solve that making
git grep
respect the cached option when invokinggrep_cache()
insidegrep_submodule()
.
Also, add tests to ensure that the desired behavior is performed.
"git grep --no-index
"不应受到 .gitmodules
内容的影响文件,但是当给出“--recurse-submodules
”或设置“submodule.recurse
”变量时,它确实如此。
没有更多,使用 Git 2.25.1(2020 年 2 月)。
现在这些设置在“--no-index
”模式下被忽略。
参见 commit c56c48d (2020 年 1 月 30 日)作者:Philippe Blain ( phil-blain
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 556ccd4 ,2020 年 2 月 12 日)
See discussion .
grep
: ignore--recurse-submodules
if--no-index
is givenHelped-by: Junio C Hamano
Signed-off-by: Philippe BlainSince grep learned to recurse into submodules in 0281e487fd ("
grep
: optionally recurse into submodules", 2016-12-16, Git v2.12.0-rc0 -- merge listed in batch #6), using--recurse-submodules
along with--no-index
makes Gitdie()
.This is unfortunate because if
submodule.recurse
is set in a user's~/.gitconfig
, invokinggit grep --no-index
either inside or outside a Git repository results in:fatal: option not supported with --recurse-submodules
Let's allow using these options together, so that setting submodule.recurse globally does not prevent using
git grep --no-index
.Using
--recurse-submodules
should not have any effect if--no-index
is used inside a repository, as Git will recurse into the checked out submodule directories just like into regular directories.
关于git - 如何 git grep 主存储库及其所有子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18810904/
我有一个文件 test.log。非常大的日志文件。它有不同级别的日志记录。例如,trace , debug , info , warning和 error . 显然trace级别消息只是高速发送垃圾邮
我正在经历一些事情,发现了我无法理解的事情, grep -v grep 这意味着什么?我知道 -v 开关将选择所有不匹配的行。但为什么是第二个grep? 这是完整的命令: ps -ef | grep
我使用 egrep 输出一些带有平台名称的行: XXX | egrep "i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu
grep退出状态部分报告中的手册: EXIT STATUS The exit status is 0 if selected lines are found, and 1 if not
我试图返回多个字符串的第一次出现,即,我想从以下文本中选择第一次出现 1259、3009 和 1589 的行。 ADWN 1259 11:00 B23 ADWN 3009
我猜它不是 Perl 兼容的正则表达式,因为有一种特殊的 grep具体来说就是 PCRE。什么是grep最相似? grep有什么特别的怪癖吗?我需要知道什么? (我习惯了 Perl 和 PHP 中的
有没有办法让 grep 从与搜索表达式匹配的文件中输出“单词”? 如果我想在多个文件中查找“th”的所有实例,我可以这样做: grep "th" * 但是输出会是这样的(粗体是我写的); some-t
我有许多(近 100 个)大 csv 文件,第一列中有 sellID。我知道某些 sellID 在 2 个或更多文件中重复 2 次或多次。是否可以使用 grep 找到所有重复的 sellID(创建映射
我有一个文件中的文件列表。该列表很大,并且文件名是非标准的:这意味着有些文件包含空格、非 ASCII 字符、引号、单引号... 因此,将庞大的文件列表作为参数传递给 grep 并不是一种选择: 因为我
我想在 shell 脚本中使用 grep 和两个变量 var = match cat list.txt | while read word_from_list; do grep "$word_
我有一个大文件,其中每一行都包含一个子字符串,例如 ABC123。如果我执行 grep ABC file.txt 或 grep ABC1 file.txt 我按预期返回这些行,但如果我执行 grep
当我执行以下 grep 时,我得到的结果我无法向自己解释: host:/usr/local/tomcat > grep '-XX:PermSize=256m' * RELEASE-NOTES:
这个问题在这里已经有了答案: grep recursively for a specific file type on Linux (5 个回答) 关闭4年前。 要在子目录中查找所有带有 .out 扩
有什么方法可以让我在搜索某些东西时使用 grep 忽略某些文件,相当于 svnignore 或 gitignore 的东西?我通常在搜索源代码时使用类似的东西。 grep -r something *
有没有办法让 grep 从匹配搜索表达式的文件中输出“单词”? 如果我想在多个文件中找到“th”的所有实例,我可以这样做: grep "th" * 但是输出会是这样的(粗体是我的); some-tex
我是 awk/sed 的完全菜鸟,所以如果我在这里遗漏了一些明显的东西,请原谅我。 基本上我正在尝试做一个嵌套的 grep,即类似于: grep $value `exim -Mvh $(`exim -
我正在尝试编写下载 node.js source 的脚本和 corresponding SHASUMS256.txt ,校验和,grep OK,不返回任何结果,使用 grep 的 -q 标志成功退出代
在 grep "str"* 这是否意味着 grep 执行 grep 的所有内容? 那么 grep -r "str". 的结果比前一个多 最佳答案 当您运行 grep str * 时,shell 将扩展
我正在尝试 grep 文件以查找匹配项的确切出现,但我也得到了更长的虚假匹配项: grep CAT1717O99 myfile.txt -F -w 输出: CAT1717O99 CAT1717O99
我有一个文件,其中包含我希望通过未指定分析运行的标识符(每行一个)。如果一切运行正常,分析将输出具有相同标识符的另一个列表(不一定按相同顺序)。 然而,事实证明,对某些输入标识符没有进行分析,并且这些
我是一名优秀的程序员,十分优秀!