2012-08-07 34 views
7

Estoy trabajando en un proyecto en git, y sé que en algún momento del pasado (mucho antes de que tuviera el código) existía un archivo llamado exec.js. Quiero ver el contenido de este archivo. Sé qué repositorio solía contener este archivo, pero no sé la ruta exacta.Buscar y ver un archivo eliminado del repos

Respuesta

3

Se puede utilizar caracteres comodín en git log:

git log -- *exec.js 

le dará todos los mensajes de registro cuando un archivo llamado exec.js se modificó.

Una vez que encuentre el borrado commit (por ejemplo A), usted podría

git checkout A -- *exec.js 

Esto le llevará la última versión de exec.js.

Si desea ver el historial completo de exec.js, podría utilizar gitk:

gitk -- *exec.js 

Esto le mostrará todas las modificaciones de nuevo. Si está particularmente interesado en una confirmación, puede hacer clic con el botón derecho en el archivo en el cuadro de diálogo gitk y luego seleccionar herramienta externa diff. Esto abrirá la herramienta de diferencia externa con los archivos completos , no solo los parches.

+0

También puede hacer un ** git diff * revisión-antes-borrar * - * filepath *** para ver el contenido completo del archivo. (Tendrá "-" al frente de cada línea, ya que cada línea fue eliminada del archivo). –

1

Puede buscar ese archivo en particular dentro de la historia de registro mediante -

Si usted no tiene ruta de archivo a continuación

git log --diff-filter=D --summary | grep filename 

Si ha ruta de archivo, puede utilizar -

git log -- filepath 
git log -n 1 -- filepath 

y una vez que obtenga la revisión, puede verificar esa revisión en particular para obtener ese archivo

+0

Usted no leyó la pregunta, ¿verdad? Dijeron que ** no conocen ** el camino. Este es el filtro de ruta. Requiere el camino. Por lo tanto, es inútil. –

+0

No conozco la ruta y no tenía el código cuando se eliminó el archivo. – user429400

+0

@JanHudec sí me ... pero, por supuesto, debe estar teniendo la ruta de repositorio git.usuario429400 ¿no es así? –

0

No es fácil enumerar el nombre completo de un archivo eliminado y su contenido en uno o dos comandos. Sin embargo, aquí es un alias para empezar:

$ git config --global alias.find-deleted-file '!f() { for c in `git rev-list HEAD`; do for fnm in `git diff-tree -r --diff-filter=D --name-only $c | grep -P ".*/$1"` ; do echo "$c $fnm" ; git show $c^:$fnm ; echo "" ; done ; done ; } ; f' 

Esto pondrá a disposición una Git find-deleted-file alias que buscará un archivo borrado (usando diff-tree) con el patrón de nombre proporcionado archivo (coincidencia de patrones proporcionada por grep -P), mostrando la confirmación del archivo se eliminó, el nombre completo del archivo y su contenido antes de que se eliminara.

Utilizando el ejemplo siguiente historia repositorio:

$ git log --all --graph --decorate --oneline --name-only 
* 3f3cba1 (HEAD, master) I 
I 
* 4c8b369 H 
E/H 
* a008343 rm F 
E/F 
* 525a127 FG 
E/F 
E/G 
* 3a10f93 initial 
A 
B 
C 
D 
E/F 

debe buscarse por el F archivo borrado usando:

$ git find-deleted-file F 
a008343eec91fe917078209d44ae93ee72fc5acb E/F 
F 
Cuestiones relacionadas