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