I've recently found git grep
and come to like its speed and de facto searching of only the files in the repo. But coming from ack
(ack-grep
in Ubuntu), one thing left to be desired is the output formatting, which is unfortunately much more like grep
than ack
. Go figure.
ack
:
On the other hand, git grep
:
Is there any set of git grep
options, or combo with other tools, that can make git grep
output look like ack
output?
Displaying only the matched pattern : By default, grep displays the entire line which has the matched string. We can make the grep to display only the matched string by using the -o option. 6. Show line number while displaying the output using grep -n : To show the line number of file with the line matched.
`git grep` command is used to search in the checkout branch and local files. But if the user is searching the content in one branch, but the content is stored in another branch of the repository, then he/she will not get the searching output.
The git grep version will only search in files tracked by git, whereas the grep version will search everything in the directory. So far so similar; either one could be better depending on what you want to achieve.
grep command in details grep searches standard input when no files were given or specified files/directories for occurrences of the pattern . When grep finds a line that contains the pattern it prints it to the standard output.
You've already answered part of your own question (--break
inserts a blank line between files, --heading
prints the file name separately, and -n
or --line-number
gives you line numbers on each line).
The rest is just color options, which are set in git config
via the color.grep.<slot>
entries. See the documentation for full details, but note that based on what you asked for, I think this does the trick:
[alias]
ack = -c color.grep.linenumber=\"bold yellow\" \
-c color.grep.filename=\"bold green\" \
-c color.grep.match=\"reverse yellow\" \
grep --break --heading --line-number
(this is expressed as you'd see it in git config --global --edit
since the quoting is messy).
Or, to set it up in one command:
git config --global alias.ack '-c color.grep.linenumber="bold yellow"
-c color.grep.filename="bold green"
-c color.grep.match="reverse yellow"
grep --break --heading --line-number'
Add or subtract -c
options to change whatever colors you like, and/or set them to your preferred defaults by setting color.grep.<name> = color
instead of using the git ack
alias.
From Travis Jeffery, to group git grep
output like ack
:
git config --global alias.g "grep --break --heading --line-number"
And then use git g
like you would git grep
:
git g <search_string>
This is not a complete match to ack
output -- it's missing the color highlighting -- but for a quick solution it's ok.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With