英文:
go-git diff between branches
问题
使用go-git可以获取两个分支之间的差异,或者例如当前分支和主分支之间的差异吗?
使用GIT可以获取当前分支和主分支之间的差异:
$ git diff master
以及两个分支之间的差异:
$ git diff master feature/branch
我在这个答案中找到了使用(*object.Commit).Patch的方法,但是它是在提交之间,而不是在分支之间。
英文:
It's possible with go-git to get the differences between two branches, or, for instance, current branch and master?
With GIT you can get diff between current branch and master:
$ git diff master
And between two branches:
$ git diff master feature/branch
I've find this answer to use (*object.Commit).Patch, but is between commits, not branches.
答案1
得分: 1
使用go-git
,你可以从func (r *Repository) Branch(name string) (*config.Branch, error)
获取一个分支。
或者获取一个引用:
ref := plumbing.NewHashReference("refs/heads/my-branch", headRef.Hash())
从该引用中获取一个提交,每个分支都有一个。
这样,你就可以调用Patch()
。
英文:
Using go-git
, you can get a Branch from func (r *Repository) Branch(name string) (*config.Branch, error)
Or get a ref:
ref := plumbing.NewHashReference("refs/heads/my-branch", headRef.Hash())
Get a Commit from that ref, one for each branch.
That way, you can call Patch()
答案2
得分: -1
请尝试这个代码:
func CompareMainNHead() {
repo, err := git.PlainOpen("./")
if err != nil {
log.Fatal(err)
}
ref, err := repo.Head()
if err != nil {
log.Fatal(err)
}
refMain, err := repo.Reference("refs/heads/main", false)
if err != nil {
log.Fatal(err)
}
commCur, err := repo.CommitObject(ref.Hash())
treeCur, err := commCur.Tree()
commMain, err := repo.CommitObject(refMain.Hash())
treeMain, err := commMain.Tree()
changes, err := object.DiffTree(treeCur, treeMain)
fmt.Println(changes)
diff, _ := commCur.MergeBase(commMain)
fmt.Println("diff: ", diff)
}
希望对你有帮助!
英文:
Try this one
func CompareMainNHead() {
repo, err := git.PlainOpen("./")
if err != nil {
log.Fatal(err)
}
ref, err := repo.Head()
if err != nil {
log.Fatal(err)
}
refMain, err := repo.Reference("refs/heads/main", false)
if err != nil {
log.Fatal(err)
}
commCur, err := repo.CommitObject(ref.Hash())
treeCur, err := commCur.Tree()
commMain, err := repo.CommitObject(refMain.Hash())
treeMain, err := commMain.Tree()
changes, err := object.DiffTree(treeCur, treeMain)
fmt.Println(changes)
diff, _ := commCur.MergeBase(commMain)
fmt.Println("diff: ", diff)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论