Liste todos os arquivos que já existiram em um repositório Git

108

Você tem uma maneira limpa de listar todos os arquivos que já existiram no branch especificado?

elmarco
fonte

Respostas:

135

Esta é uma variação simplificada da solução de Strager :

git log --pretty=format: --name-status | cut -f2- | sort -u

Edit: Obrigado a Jakub por me ensinar um pouco mais nos comentários, esta versão tem um pipeline mais curto e dá ao git mais oportunidade de fazer as coisas certas.

git log --pretty=format: --name-only --diff-filter=A | sort -u
Dustin
fonte
8
@Dustlin: Add --diff-filter = A opção (lista apenas os arquivos adicionados). A versão atual (sem a filtragem sed apenas de arquivos adicionados) falhará se você tiver habilitado a detecção de renomeação e tiver renomeações no histórico. Acho que você pode usar --name-only em vez de --name-status e remover 'cut -f2-' do pipeline.
Jakub Narębski
Em um de meus repositórios, obtenho algumas linhas duplicadas (incluindo várias linhas em branco no início da saída) com o segundo comando que não são ingênuas com o primeiro.
Slipp D. Thompson
Se você precisar de um pouco mais de informação do que o nome do arquivo: $ git log --pretty = format: "% h% an [% cd]:% s" --name-only | corte -f2- | sort -u | grep Filename.ext
Nitay,
3
Observação: --allé algo de que você precisará se tiver mais de uma dica órfã. Por exemplo, vários históricos separados em um repo.
ThorSummoner
2
--diff-filter=Aignora os arquivos que foram criados ao copiar um arquivo já existente, portanto, adicioná-lo nem sempre é o que você deseja.
cmbuckley
13

Isso faz a coisa certa para verificar se um nome de arquivo já esteve presente no repo, não apenas no branch atual.

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar
dch
fonte
3

Você pode correr git-log --name-status, o que ecoa algo como:

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <[email protected]>
Date:   Tue Aug 12 13:28:34 2008 -0700

    Added test file.

A       test

Em seguida, extraia os arquivos adicionados:

git-log --name-status | sed -ne 's/^A[^u]//p' | sort -u
strager
fonte
2

Aqui estão dois alias úteis: FindFile ffe FindFilewithCopies ffc:

# Find if one file ever had into repository
ff = "!git log --pretty=format: --name-status --all -M -B | sort -u | grep $1   #"
# The same as above but showing copied files
ffc = "!git log --pretty=format: --name-status --all -C -M -B | sort -u | grep $1 #"

Você obtém informações sobre nomes de arquivos e operações com eles.

Uso de amostra:

$ git ff create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php

$ git ffc create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
C052    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_11_210246_create_boletin_nosend_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php
Juan Antonio Tubío
fonte