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?

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

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

3

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

commit afdbbaf52ab24ef7ce1daaf75f3aaf18c4d2fee0
Author: Your Name <your@email.com>
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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.