Как я могу получить количество коммитов Git?

Есть довольно много ответов для обработки клиентской стороны, но вы можете изменить выходную серверную сторону, если хотите.

Есть несколько способов приблизиться к этому, я начну с основы. Вам придется подклассифицировать класс JsonResult и переопределить метод ExecuteResult. Оттуда вы можете использовать несколько разных подходов для изменения сериализации.

Подход 1: Реализация по умолчанию использует JsonScriptSerializer . Если вы посмотрите на документацию, вы можете использовать метод RegisterConverters для добавления пользовательских JavaScriptConverters . Есть несколько проблем с этим: JavaScriptConverter сериализуется в словаре, то есть он берет объект и сериализуется в Json-словаре. Чтобы сделать сериализацию объекта строкой, требуется бит хакера, см. post .

public class CustomJsonResult : JsonResult
{
    private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType))
        {
            response.ContentType = ContentType;
        }
        else
        {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null)
        {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            // Use your custom JavaScriptConverter subclass here.
            serializer.RegisterConverters(new JavascriptConverter[] { new CustomConverter });

            response.Write(serializer.Serialize(Data));
        }
    }
}

Подход 2 (рекомендуется): Второй подход - начать с переопределенного JsonResult и пойти с другим сериализатором Json, в моем случае Json .NET сериализатор. Это не требует взлома подхода 1. Вот моя реализация подкласса JsonResult:

public class CustomJsonResult : JsonResult
{
    private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType))
        {
            response.ContentType = ContentType;
        }
        else
        {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null)
        {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null)
        {
            // Using Json.NET serializer
            var isoConvert = new IsoDateTimeConverter();
            isoConvert.DateTimeFormat = _dateFormat;
            response.Write(JsonConvert.SerializeObject(Data, isoConvert));
        }
    }
}

Пример использования:

[HttpGet]
public ActionResult Index() {
    return new CustomJsonResult { Data = new { users=db.Users.ToList(); } };
}

Дополнительные кредиты: Джеймс Newton-King

695
задан Peter Mortensen 12 November 2017 в 00:57
поделиться

6 ответов

Генерируйте число во время сборки и запишите это в файл. Каждый раз, когда Вы делаете выпуск, фиксируете тот файл с комментарием, "Создают 147" (или независимо от того, что номер сборки в настоящее время). Не фиксируйте файл во время нормальной разработки. Таким образом, можно легко отобразиться между номерами сборки и версиями в Мерзавце.

3
ответ дан 22 November 2019 в 21:33
поделиться

Существует хороший сценарий помощника, который люди Мерзавца используют, чтобы помочь генерировать полезный номер версии на основе Мерзавца, описывают. Я показываю сценарий и объясняю это в моем ответе на то, Как Вы включали бы текущий идентификатор фиксации в Мерзавца файлы проекта?.

7
ответ дан 22 November 2019 в 21:33
поделиться

Вы не первый, который будет думать о "числе пересмотра" в Мерзавце, но'wc'довольно опасно, так как фиксация может быть стерта или раздавлена, и пересмотренная история.

"Число пересмотра" было особенно важно для Подверсии, так как это было необходимо в случае слияния (SVN1.5, и 1.6 изменили к лучшему ту переднюю сторону).

Вы могли закончить с рычагом перед фиксацией, который будет включать число пересмотра в комментарий с алгоритмом, не включающим поиск всей истории ответвления для определения корректного числа.

Базар на самом деле придумал такой алгоритм, и это может быть хорошая начальная точка для того, что Вы хотите сделать.

(Как ответ Мороженого указывает, у Мерзавца есть на самом деле собственный алгоритм, на основе последнего тега, плюс количество фиксаций, плюс что-то вроде ключа SHA-1). Необходимо видеть (и upvote) его ответ, если он работает на Вас.


Для иллюстрирования идеи Aaron можно также добавить хеш фиксации Мерзавца в "информационный" файл приложения, Вы являетесь распределительными со своим приложением.

Тот путь, о поле был бы похож:

About box

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

34
ответ дан 22 November 2019 в 21:33
поделиться

Если Вы ищете уникальный и все еще довольно читаемый идентификатор для фиксаций, мерзавец описывают, могла бы быть просто вещь для Вас.

53
ответ дан 22 November 2019 в 21:33
поделиться

git rev-parse --short HEAD

8
ответ дан 22 November 2019 в 21:33
поделиться

git shortlog - односторонний.

148
ответ дан 22 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: