Closed1
go-gitでdiffとるやつ

一番欲しい情報を得るのに苦労したので。
package main
import (
"fmt"
"log"
"github.com/go-git/go-git/v5"
)
func main() {
repo, err := git.PlainOpen(".")
if err != nil {
log.Fatal(err)
}
headRef, err := repo.Head()
if err != nil {
log.Fatal(err)
}
headCommit, err := repo.CommitObject(headRef.Hash())
if err != nil {
log.Fatal(err)
}
prevCommit, err := headCommit.Parents().Next()
if err != nil {
log.Fatal(err)
}
headTree, err := headCommit.Tree()
if err != nil {
log.Fatal(err)
}
prevTree, err := prevCommit.Tree()
if err != nil {
log.Fatal(err)
}
patch, err := prevTree.Patch(headTree)
if err != nil {
log.Fatal(err)
}
fmt.Println(patch.String())
}
40バイトのオブジェクト名が表示されるのでgit diff --full-index HEAD~1
と同じ結果が得られる。
hunk headerの設定によっては結果が異なるかも。
ただgo-gitはgit apply
と互換性がないらしい。
なんてこったい。
go-gitとgo-gitdiffを組み合わせればいけそう。
このスクラップは2ヶ月前にクローズされました