Используя git, как я могу искать строку во всех ветвях?
используя git, как я могу искать во всех файлах во всех локальных ветвях для данной строки ?
GitHub specific: можно ли выполнить вышеупомянутый поиск во всех ветвях github ? (На моем удаленном репозитории github есть несколько удаленных ветвей, которые в идеале мне не нужно было бы сбивать для этого поиска..)
6 ответов:
вы можете сделать это на Git РЕПО:
git grep "string/regexp" $(git rev-list --all)
расширенный поиск Github имеет возможность поиска кода:
поиск кода будет просматривать весь код, публично размещенный на GitHub. Вы также можете фильтровать по:
- язык:
language:
- имя репозитория (включая имя пользователя):
repo:
- путь к файлу:
path:
Если вы используете команду @manojlds git grep и получаете сообщение об ошибке:
-bash: /usr/bin/git: Argument list too long"
тогда вы должны использовать xargs:
git rev-list --all | xargs git grep "string/regexp"
во многих случаях
git rev-list --all
может вернуть огромное количество коммитов, которые навсегда сканируются. Если вы вместо поиска по каждой фиксации в каждой ветке в истории вашего репозитория просто хотите найти все советы по ветвям, вы можете заменить его наgit show-ref --heads
. Итак, в общей сложности:git grep "string" `git show-ref --heads`
или:
git show-ref --heads | xargs git grep "string"
Совет: вы можете записать вывод в файл для просмотра в Редакторе.
nano ~/history.txt git show-ref --heads | xargs git grep "search string here" >> ~/history.txt
существует несколько проблем с решениями, перечисленными здесь (даже принятыми).
- вам не нужно перечислять все хэши, как вы получите дубликаты, также требуется больше времени.
это основывается на этом, где вы можете искать строку
"test -f /"
на несколько ветвейmaster
иdev
какgit grep "test -f /" master dev
что же
printf "master\ndev" | xargs git grep "test -f /"
так вот.
это находит хэши для кончика всех локальных ветвей и ищет только в тех коммитах.
git branch -v --no-abbrev | awk -F' *' '{print }' | xargs git grep "string/regexp"
Если вам нужно искать в удаленных филиалах тоже Затем добавить
-a
:git branch -a -v --no-abbrev | awk -F' *' '{print }' | xargs git grep "string/regexp"
обновление:
# search in local branches git branch | cut -c3- | xargs git grep "string" # search in remote branches git branch -r | cut -c3- | xargs git grep "string" # search in all (local and remote) branches git branch -a | cut -c3- | xargs git grep "string" # search in branches, and tags git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"