classifique GNU e git blame

2

Hoje achei que estava fazendo uma operação simples:

git blame file | sort -k 3

Para obter todas as linhas de file classificadas pela data em que foram alteradas pela última vez. Infelizmente, parece não estar ordenando corretamente. funciona se eu fizer o seguinte:

git blame file | cut -c 20- | sort

Que apenas corta a primeira parte da linha e depois faz o tipo. O sucesso deste comando indica para mim que sort pode na verdade fazer a operação que eu estava tentando. Por que não funcionou?

Aqui está uma linha de exemplo da saída de git blame file :

35d8e9eb (username 2007-01-17 03:58:04 +0000 155) Some text on line 155

Editar: Usar qualquer número razoável além de 3 na linha de comando original parece funcionar bem - eu posso classificar pelo hash (campo 1), o nome de usuário (campo 2), a hora do dia (campo 4), ou o número da linha (campo 6), mas a data (campo 3) não funciona - não consigo identificar em qual ordem ela realmente acaba ...

Editar 2: Eu fiz um arquivo de entrada sanitizado que mostra o mesmo problema. Aqui está cleaned.txt :

cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

E a saída de sort -k 3 cleaned.txt :

$ sort -k 3 cleaned.txt 
cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

Como você pode ver, a classificação no campo de data não parece ter ocorrido. Aqui está a saída de cut -c 20- cleaned.txt | sort :

$ cut -c 20- cleaned.txt | sort
2007-01-17 03:58:04 +0000 135)
2010-01-30 04:26:28 +0000 178)
2010-12-14 19:41:18 +0000  42)

Classificar datas nesse caso funciona bem! Alguma sugestão?

    
por Carl Norum 24.03.2011 / 00:11

1 resposta

4

Eu acabei de descobrir. O nome de usuário mais curto eeeeeee significa que há um espaço extra antes do campo de data. Como o separador de campo para sort é uma transição não em branco para em branco, o campo de data da linha com o nome de usuário mais curto tem esse espaço como parte do campo-chave e é classificado primeiro. Correção simples:

git blame file | sort -b -k 3
    
por 24.03.2011 / 00:42