用朱莉娅的LibGit2制作一个`git diff`

时间:2018-02-13 16:01:41

标签: git julia libgit2

我正在尝试为另一个安装了julia而不是git的人调试问题。我想知道对julia包进行了哪些更改,基本上是命令git diff

我想知道我是否可以使用LibGit2?这些命令让我非常接近:

 repo = LibGit2.GitRepo(Pkg.dir("NCDatasets"))
 tree = LibGit2.GitTree(repo,"HEAD^{tree}"); 
 diff = LibGit2.diff_tree(repo,tree,"")

他们回来了:

 GitDiff:
 Number of deltas: 1
 GitDiffStats:
 Files changed: 1
 Insertions: 1
 Deletions: 1

假设我想知道包NCDatasets中的更改。

所以我知道有一个文件被更改了。我怎么知道,这个文件是哪一个以及如何更改的?

不幸的是,根据我从这里理解的内容,我没有得到任何进一步的信息:

https://github.com/JuliaLang/julia/blob/master/stdlib/LibGit2/src/diff.jl

https://github.com/JuliaLang/julia/blob/master/stdlib/LibGit2/test/libgit2.jl

1 个答案:

答案 0 :(得分:1)

您可以使用:

julia> for i in 1:count(diff)
           d = diff[i];print(d)
           println(unsafe_string(d.old_file.path), "\t",
                   unsafe_string(d.new_file.path),"\n---\n")
       end

这将打印diff的每个条目。遗憾的是,print的标准DiffFile不会打印文件名,所以我在标准打印下面添加了打印。

但请注意,此diff不包含未跟踪的文件。捕获它们的最简单方法是使用LibGit2.status函数并使用walkdir遍历存储库中的所有文件。此方法也有其缺点,因为它不会检测diff将包含的已删除文件。应该可以通过组合两种方法来编写捕获所有案例的函数。