需要在蛋糕脚本中的GitPull方法中获取修改文件的详细信息

时间:2017-03-21 04:47:27

标签: c# git libgit2sharp cakebuild

您好我正在使用GitPull方法将更改提取到存储库。

从以下链接中提及

http://cakebuild.net/api/Cake.Git/GitAliases/CC1AE32F

我需要在执行GitPull方法时获取更新文件的日志。

有没有办法在下面的页面中获取这些详细信息,或建议其他方式在蛋糕上执行上述操作。

http://cakebuild.net/dsl/git/

2 个答案:

答案 0 :(得分:3)

首先是免责声明,因为之前的Cake.Git / Libgit2sharp合并问题,您需要升级到版本0.14.0或更晚Cake.Git才能使此答案生效。

无论快进合并与否,最简单的方法是可靠地获取更改文件:

  1. 拉前提交
  2. 拉动
  3. 如果repo不是最新的,请在拉
  4. 之后获取
  5. 在pull commit之前和之后做一个差异
  6. 执行此操作的Cake.Git方法是

    1. GitLogTip
    2. GitPull
    3. 如果pullResultStatus!= GitMergeStatusUpToDateGitLogTip
    4. GitDiff
    5. 这看起来像下面的

      #addin nuget:?package=Cake.Git&version=0.14.0
      
      DirectoryPath repoDir = MakeAbsolute(Directory("./Cake_Git"));
      
      string  name    = "John Doe",
              email   = "john@doe.com";
      
      var beforePullCommit = GitLogTip(repoDir);
      
      var pullResult = GitPull(repoDir, name, email);
      
      if (pullResult.Status!=GitMergeStatus.UpToDate)
      {
          var afterPullCommit = GitLogTip(repoDir);
      
          var diff = GitDiff(repoDir, beforePullCommit.Sha, afterPullCommit.Sha);
      
          foreach(var file in diff)
          {
              Information("{0}", file);
          }
      }
      

      GitDiff返回具有这些属性的GitDiffFile的ICollection。

      Name        Value           Summary
      Exists      bool            The file exists in the new side of the diff.
      OldExists   bool            The file exists in the old side of the diff.
      OldPath     string          The old path.
      Path        string          The new path.
      Status      GitChangeKind   The kind of change that has been done
                                  (added, deleted, modified ...).
      

      并且有一个ToString()覆盖sp,这个脚本的输出看起来像这样

      Path: ReleaseNotes.md, OldPath: ReleaseNotes.md, Status: Modified, Exists: True, OldExists: True
      Path: src\Cake.Git\Cake.Git.csproj, OldPath: src\Cake.Git\Cake.Git.csproj, Status: Modified, Exists: True, OldExists: True
      Path: src\Cake.Git\GitMergeResult.cs, OldPath: src\Cake.Git\GitMergeResult.cs, Status: Modified, Exists: True, OldExists: True
      Path: src\Cake.Git\packages.config, OldPath: src\Cake.Git\packages.config, Status: Modified, Exists: True, OldExists: True
      Path: src\SolutionInfo.cs, OldPath: src\SolutionInfo.cs, Status: Modified, Exists: True, OldExists: True
      

      但是因为它是一个打字的对象,你当然可以通过编程方式进行更多操作。

答案 1 :(得分:1)

  执行GitPull方法时

您可以使用(非蛋糕解决方案)尝试after a git pull(即fetch plus merge)

git log --stat

或者,如Fun with FETCH_HEAD

所述
git log --name-only ..FETCH_HEAD

我没有看到Cake GitLog方法支持的选项,因此您可以尝试至少解析结果:

var result = GitLog("c:/temp/cake", 1);

(这是git pull生成的最后一次合并提交)