repositorio - git ver archivos modificados
¿Cómo puedo buscar las sucursales de Git para un archivo o directorio? (6)
Aunque la respuesta de @ididak es bastante buena, y @ Handyman5 proporciona una secuencia de comandos para usarla, encontré un enfoque muy restringido.
A veces es necesario buscar algo que pueda aparecer / desaparecer con el tiempo, así que, ¿por qué no buscar en todos los confirmaciones? Además de eso, a veces necesitas una respuesta detallada, otras veces solo confirmas coincidencias. Aquí hay dos versiones de esas opciones. Ponga estos scripts en su camino:
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
Vea que utilizando getopt puede modificar ese script para alternar la búsqueda de todas las confirmaciones, refs, refs / heads, verbose, etc.
$ git find-file <regex>
$ git find-file --verbose <regex>
$ git find-file --verbose --decorated --color <regex>
Checkout https://github.com/albfan/git-find-file para una posible implementación
En Git, ¿cómo podría buscar un archivo o directorio por una ruta a través de varias sucursales?
He escrito algo en una rama, pero no recuerdo cuál. Ahora necesito encontrarlo.
Aclaración : estoy buscando un archivo que creé en una de mis sucursales. Me gustaría encontrarlo por camino, y no por su contenido, ya que no recuerdo cuáles son los contenidos.
Copie y pegue esto para usar git find-file SEARCHPATTERN
Imprimiendo todas las ramas 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 sucursales 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 comandos agregarán algunos scripts de shell mínimos directamente a su ~/.gitconfig
como alias de git global .
Puede usar gitk --all
y buscar los "caminos que se tocan" y los nombres de ruta que le interesan.
Una implementación bastante decente del comando de find
para repositorios git se puede encontrar aquí: https://github.com/mirabilos/git-find
git log lo encontrará por ti:
% git log --all -- somefile
commit 55d2069a092e07c56a6b4d321509ba7620664c63
Author: Dustin Sallings <[email protected]>
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 menos si se usa el shell bash) para que el shell pase el patrón glob a git sin cambios, en lugar de expandirlo (al igual que con la find
Unix).
git ls-tree podría ayudar. Para buscar 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 buscar con expresiones regulares el nombre del archivo.