Как показать коммиты Git, которые были опубликованы менее чем за 60 секунд между собой? - PullRequest
0 голосов
/ 22 марта 2010

Я хочу показать отфильтрованную историю коммитов.Мне нужны только те коммиты, между которыми менее 60 секунд, чтобы увидеть, кто так быстро сделал плохую работу.Как это сделать?

Ответы [ 2 ]

1 голос
/ 22 марта 2010

Вам придется самостоятельно анализировать вывод git-log; нет встроенного способа сделать это. Сложно иметь дело с слияниями. Если бы у вас была линейная история, это было бы очень быстро - используйте вывод git log --pretty="$H $at" напрямую (это печатает полный хэш и метку времени UNIX). Однако, если у вас есть слияния, нет способа всегда заканчивать каждым коммитом, за которым сразу следует тот, с которым вы хотите сравнить.

Тогда очевидный подход заключается в поиске родительского времени для каждого коммита в отдельности. Конечно, довольно неэффективно делать дополнительный вызов в git log для каждого коммита, вместо того, чтобы разумно их запоминать, но код наверняка короче. Вот что я придумал как однострочник bash:

git log --no-merges --pretty="%H %at" |
while read line; do
    time=${line#* }
    commit=${line% *}
    parent_time=$(git log --no-walk --pretty=%at $commit^)
    dt=$((time - parent_time))
    if [ $dt -lt 60 -a $dt -gt -60 ]; then
        # modify this log format to whatever you like
        git log --no-walk --pretty="%H %an %s" $commit
    fi
done

Это не так ужасно медленно, поэтому, если вы не хотите делать это так много, это, вероятно, достаточно хорошо. Вы также должны проверить всю дорогу до начала хранилища только один раз; после этого вы можете ограничить начальный журнал git --since.

Вы заметите, что я ограничил разницу во времени между + -60 секундами. Вполне возможно, что он будет отрицательным, если произошел ребаз; Вы, вероятно, все еще хотите заметить, если кто-то быстро сделал два коммита, а затем поменял их местами, поэтому я включил отрицательные значения.

0 голосов
/ 23 марта 2010

чтобы увидеть, кто сделал плохую работу, совершив так быстро

Есть очень веские причины для двух отдельных коммитов за очень короткий промежуток времени.

Предположим, что вы работали в течение двух часов, вы исправили две ошибки, изменили файл A fix bug #a и изменили файл B fix bug #b.

git add A
git commit -m"fixed bug #a"
git add B
git commit -m"fixed bug #b"

разница между этими коммитами может составлять 10 секунд, но с ними все в порядке.

На самом деле, большинство людей согласятся с тем, что неправильно делать раздавливание этих коммитов вместе.

Это, конечно, упрощенный сценарий, есть много способов разделить ваши изменения на несколько коммитов, например, с помощью интерактивной промежуточной команды git add -p

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...