Git changelog: как получить все изменения до определенного тега?

Лучшим решением для C # / всех статических языков .NET является использование CodeDOM для таких вещей. (В качестве примечания, его другая основная цель заключается в динамическом построении битов кода или даже целых классов.)

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

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

class Program
{
    static void Main(string[] args)
    {
        var csc = new CSharpCodeProvider(new Dictionary() { { "CompilerVersion", "v3.5" } });
        var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
        parameters.GenerateExecutable = true;
        CompilerResults results = csc.CompileAssemblyFromSource(parameters,
        @"using System.Linq;
            class Program {
              public static void Main(string[] args) {
                var q = from i in Enumerable.Range(1,100)
                          where i % 2 == 0
                          select i;
              }
            }");
        results.Errors.Cast().ToList().ForEach(error => Console.WriteLine(error.ErrorText));
    }
}

Класс первостепенной важности здесь - CSharpCodeProvider, который использует компилятор для компиляции кода «на лету». Если вы хотите запустить код, вам просто нужно использовать немного отражения для динамической загрузки сборки и ее выполнения.

Здесь - еще один пример на C #, который (хотя чуть менее кратким) дополнительно показывает вам, как запустить исполняемый код во время выполнения, используя пространство имен System.Reflection.

23
задан Luwe 12 September 2011 в 12:10
поделиться

4 ответа

Вы можете просто сделать:

git log --oneline --decorate v0.1.0

... чтобы показать каждый коммит вплоть до v0.1.0 включительно. Конечно, git log позволяет также ограничивать коммиты, показанные любым из способов, которые понимает git rev-list, поэтому, если вы хотите увидеть только изменения между v0.0.9 и v0.1.0, вы также можете сделать:

git log --oneline --decorate v0.0.9..v0.1.0

Альтернативным выходом, который может быть полезен для этой цели, является git shortlog, в котором группируются и суммируются вклады каждого автора. Попробуйте, например:

git shortlog v0.1.0
37
ответ дан Mark Longair 12 September 2011 в 12:10
поделиться

Просто добавьте tagname к вашей команде, и с вами все будет в порядке :) Мне нравится переключатель --graph, чтобы визуализировать ветви, которые привели к этому тегу:)

2
ответ дан flob 12 September 2011 в 12:10
поделиться

Обновление скрипта, предложенного Creotiv для улучшения сортировки тегов

#!/bin/bash
# Author:Andrey Nikishaev, Gunnar Lindholm
echo "CHANGELOG"
echo ----------------------
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^ | while read TAG ; do
     echo
    if [ $NEXT ];then
        echo [$NEXT]
    else
        echo "[Current]"
    fi
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
    NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST
3
ответ дан Steve Czetty 12 September 2011 в 12:10
поделиться

Вы можете использовать Git Changelog Command Line , чтобы сделать это:

npx git-changelog-command-line -std -tr v0.1.0 -tec "
# Changelog

Changelog for {{ownerName}} {{repoName}}.

{{#tags}}
## {{name}}
 {{#issues}}
  {{#hasIssue}}
   {{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
   {{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
  {{/hasIssue}}
  {{^hasIssue}}
### {{name}}
  {{/hasIssue}}

  {{#commits}}
**{{{messageTitle}}}**

{{#messageBodyItems}}
 * {{.}} 
{{/messageBodyItems}}

[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*

  {{/commits}}

 {{/issues}}
{{/tags}}
"
0
ответ дан Tomas Bjerre 12 September 2011 в 12:10
поделиться
Другие вопросы по тегам:

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