Сьогодні я подумав, що роблю просту операцію:
git blame file | sort -k 3
Щоб отримати всі рядки, file
відсортовані за датою, коли вони востаннє змінені. На жаль, це, здається, не сортує його правильно. Це дійсно працює , якщо я роблю наступне:
git blame file | cut -c 20- | sort
Яка просто зламає першу частину лінії, а потім робить сортування. Успіх цієї команди вказує на мене, що насправді sort
може зробити операцію, яку я намагався. Чому це не вийшло?
Ось приклад рядка з результату git blame file
:
35d8e9eb (username 2007-01-17 03:58:04 +0000 155) Some text on line 155
Редагувати: Використання будь-якого розумного числа, крім того, 3
у вихідному командному рядку, здається, працює добре - я можу сортувати за хешем (поле 1), ім'ям користувача (поле 2), часом доби (поле 4) або номером рядка (поле 6), але дата (поле 3) не працює - я не можу взагалі визначити, в якому порядку вона насправді закінчується ...
Редагувати 2: я створив файл санітарного введення, який показує ту ж проблему. Ось 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)
І вихід від 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)
Як ви бачите, сортування за датою поля взагалі не відбулося. Ось результат із 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)
Сортування за датами в цьому випадку працює чудово! Будь-які пропозиції?
eeeeeee
,cccccccc
іhhhhhhhh
), але справжні імена часто відрізняються (наприклад, у git.git є імена авторів, на яких розміщено лише одне і до п’яти пробілів, розділених "словами"). Використання-e
може допомогти; Адреси електронної пошти, які він відображає, набагато рідше містять пробіли.