¿Cómo puedo search twigs de Git para un file o directory?

En Git, ¿cómo podría search un file o directory por ruta a través de una serie de twigs?

He escrito algo en una twig, pero no recuerdo cuál. Ahora necesito encontrarlo.

Aclaración : estoy buscando un file que creé en una de mis sucursales. Me gustaría encontrarlo por ruta, y no por su contenido, ya que no recuerdo cuáles son sus contenidos.

git log lo encontrará por usted:

% git log --all -- somefile commit 55d2069a092e07c56a6b4d321509ba7620664c63 Author: Dustin Sallings <dustin@spy.net> Date: Tue Dec 16 14:16:22 2008 -0800 added somefile % git branch -a --contains 55d2069 otherbranch 

Soporta globbing, también:

 % git log --all -- '**/my_file.png' 

Las comillas simples son necesarias (al less si se utiliza el shell bash) para que el intérprete de commands pase el patrón glob a git sin cambios, en lugar de expandirlo (al igual que con Unix find ).

git ls-tree podría ayudar. Para search en todas las sucursales existentes:

 for branch in `git for-each-ref --format="%(refname)" refs/heads`; do echo $branch :; git ls-tree -r --name-only $branch | grep '<foo>' done 

La ventaja de esto es que también puede search expresiones regulares para el nombre del file.

Aunque la respuesta de @ididak es muy buena, y @ Handyman5 proporciona un script para usarla, encontré un enfoque restringido.

A veces necesitas search algo que pueda aparecer / desaparecer con el time, entonces ¿por qué no search en todas las confirmaciones? Además de eso, a veces necesitas una respuesta detallada, otras veces solo comprometes coincidencias. Aquí hay dos versiones de esas opciones. Pon estos scripts en tu path:

git-find-file

 for branch in $(git rev-list --all) do if (git ls-tree -r --name-only $branch | grep --quiet "$1") then echo $branch fi done 

git-find-file-verbose

 for branch in $(git rev-list --all) do git ls-tree -r --name-only $branch | grep "$1" | sed 's/^/'$branch': /' done 

Ahora puedes hacer

 $ git find-file <regex> sha1 sha2 $ git find-file-verbose <regex> sha1: path/to/<regex>/searched sha1: path/to/another/<regex>/in/same/sha sha2: path/to/other/<regex>/in/other/sha 

Observe que al usar getopt puede modificar esa secuencia de commands para alternar la búsqueda de todos los commits, refs, refs / heads, been verbose, etc.

 $ git find-file <regex> $ git find-file --verbose <regex> $ git find-file --verbose --decorated --color <regex> 

Consulte https://github.com/albfan/git-find-file para una posible implementación

Puede usar gitk --all y search commits "tocando routes" y la ruta que le interesa.

Copie y pegue esto para usar git find-file SEARCHPATTERN

Imprimir todas las twigs buscadas:

 git config --global alias.find-file '!for branch in `git for-each-ref --format="%(refname)" refs/heads`; do echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; done; :' 

Imprimir solo twigs con resultados:

 git config --global alias.find-file '!for branch in $(git for-each-ref --format="%(refname)" refs/heads); do if git ls-tree -r --name-only $branch | grep "$1" > /dev/null; then echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; fi; done; :' 

Estos commands agregarán algunos scripts de shell mínimos directamente a su ~/.gitconfig como git alias global .

Una implementación bastante decente del command find para repositorys git se puede encontrar aquí: https://github.com/mirabilos/git-find