0

我有以下代码

    commitIter, err := r.Log(&git.LogOptions{From: commit.Hash})
    CheckIfError(err)

    err = commitIter.ForEach(func(c *object.Commit) error {
        parent, err := c.Parent(0)

        if err != nil {
            return nil
        }

        patch, err := c.Patch(parent)
        CheckIfError(err)

        fmt.Println(patch)

        return nil
    })

它遍历所有提交并使用对父级的引用为每个提交生成补丁。但是第一次提交没有父级,然后我无法生成补丁。有没有像传递空提交这样的解决方法?

我正在搜索,我在归档go-git存储库上找到了 open pull request 。

4

1 回答 1

0

使用对象树而不是提交允许您为第一次提交生成补丁。

例如:

    commitTree, err := commit.Tree()
    if err == nil {
        parentTree := &object.Tree{}
        if commit.NumParents() != 0 {
            parent, err := commit.Parents().Next()
            if err == nil {
                parentTree, err = parent.Tree()
                if err == nil {
                    parentTree.Patch(commitTree)
                }
            }
        } else {
            parentTree.Patch(commitTree)
        }
    }
于 2022-01-18T19:38:28.387 回答