git log --before = "4 месяца" показывает мне ветки с коммитами от 3 недель до go. Что я делаю неправильно? - PullRequest
2 голосов
/ 04 мая 2020

поэтому у меня есть этот фрагмент, который я хочу использовать для фильтрации веток, у которых нет определенного префикса и которые не получили никаких коммитов в течение более 3 месяцев, чтобы впоследствии я мог удалить их с нашего пульта.

 for k in $(git branch -r | awk -Forigin !'/\/Prefix1\/|\/prefix2\//'); do
  if [ "$(git log -1 --before="3 month" $k)" ]; then
    echo "$(git log -1 --pretty=format:"%ci, %cr, " $k) $k";
  fi;
done

В настоящее время проблема заключается в том, что когда я запускаю это, я вижу ветви, которые получили коммиты 3 недели go, 5 месяцев go, 2 месяца go, 1 месяц go et c et c и я не могу понять, почему.

Но если я только запускаю: git log --before = "4 month" --pretty = format: "% ci,% cr," Работает как задумано.

Может кто-нибудь дать мне какое-либо руководство

1 Ответ

3 голосов
/ 04 мая 2020

-1 in git log -1 [filters] $k будет:

  • развернуть историю git log [filters] $k
  • ограничить эту историю своей первой строкой

Таким образом, если ветвь имеет 3-месячный коммит в своей истории (я бы предположил: любой из ваших ветвей имеет), git log -1 --before="3 month" $k всегда будет показывать 1 строку - первый коммит в его истории, которому более 3 месяцев.

Ваше ведущее if [ ... ] условие всегда будет истинным.


Чтобы исправить это, вы можете ограничить диапазон коммитов, чтобы выбрать только ведущий коммит каждой ветви:

git log --before="3month" $k^..$k
...