Ограничить количество коммитов для нажатия на удаленный

обзор: в нашей компании мы пытаемся ввести политику, чтобы разработчик не мог запушить 5 и более коммитов за один раз. например: если есть 20 коммитов, которые необходимо отправить в восходящий поток. проверка не должна разрешать это с сообщением, что разрешено отправлять только 5 или менее коммитов за раз. Я пытаюсь сделать следующее, чтобы получить количество коммитов на моем локальном мастере и восходящем мастере.


git log --oneline origin/master ^master | wc -l 

но это не дает мне ожидаемого результата.

Эта политика кажется бессмысленной и, вероятно, представляет собой проблему xy.

jordanm 03.05.2022 01:52
origin/master ^master — это полная форма master..origin/master; вы хотели origin/master..master, чья длинная форма master ^origin/master (или вы можете написать это как ^origin/master master, чтобы увидеть, где ^ или символ оператора отрицания идет по отношению к форме с двумя точками).
torek 03.05.2022 08:47

В любом случае, как только вы правильно поймете синтаксис, используйте здесь git rev-list --count, а не git log --oneline ... | wc -l. Однако, как сказал @jordanm (который имеет множество голосов), эта политика, вероятно, не очень хорошая идея.

torek 03.05.2022 08:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хостинг-сервис Gerrit имеет такое ограничение, что за один пуш можно отправить максимум 20 коммитов на проверку. Если их больше 20, пользователю нужно отправлять их партиями. Я не знаю, зачем вам такая политика, и я думаю, что политика Геррита больше касается производительности.

Чтобы подсчитать количество новых коммитов, которые мы сделали с точки форка, которая обычно находится на ветке удаленного отслеживания (предположим, что это origin/foo), мы можем использовать

git rev-list --count origin/foo..HEAD

или если мы знаем два коммита

git rev-list --count commit1..commit2

Чтобы реализовать вашу политику, я бы написал хук на стороне сервера, например pre-receive. В хуке подсчитайте количество новых коммитов и отклоните отправку, если число больше 4.

#!/bin/bash

while read oldvalue newvalue refname;do
    # todo, case 0, deal with refs other than branches
    # todo, case 1, create a branch
    # todo, case 2, delete a branch

    # case3, update a branch
    count=$(git rev-list --count ${oldvalue}..${newvalue})
    if [[ "${count}" -ge 5 ]];then
        echo some message
        exit 1
    fi
done

Хотя этот ответ довольно интересен и, кажется, решает то, о чем спрашивал ОП, но какой смысл тратить время на решение чего-то, что действительно звучит как проблема X / Y?

terrorrussia-keeps-killing 03.05.2022 07:04

Другие вопросы по теме