如何使用C#和Git签出标签?

时间:2017-07-19 23:53:28

标签: c# git

我有一个控制台应用程序,它使用来自某个git存储库的内容。它执行以下操作:

  • 从Git repo中提取内容
  • 以某种方式组织
  • 将有组织的内容移动到其他位置

问题是第二项。应根据给定的Git标记组织和处理内容。目前,C#控制台应用程序可以克隆存储库,但现在我需要它来逐个检查存储库中的所有标记。在检查每个标签后,控制台应用程序应处理文件,然后转到下一个标签。

我的C#控制台应用程序如何检查标签?我想只使用像git checkout tags/<tagname>

这样的原生Git命令

1 个答案:

答案 0 :(得分:1)

要做到这一点实际上相当简单。我创建了一个通用的Git命令方法,使用一个新进程,然后从StandardOutput读取。然后我将所有StandardOutput作为一个逗号分隔的字符串返回,以后可以迭代。

public string RunGitCommand(string command, string args, string workingDirectory)
{
    string git = "git";
    var results = "";
    var proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = git,
            Arguments = $"{command} {args}",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true,
            WorkingDirectory = workingDirectory,
        }
    };
        proc.Start();
        while (!proc.StandardOutput.EndOfStream)
        {
            results += $"{proc.StandardOutput.ReadLine()},";
        }
        proc.WaitForExit();
        return results;    
 }

这让我可以调用像这样的标签

var tags = RunGitCommand("tag", "", $"{location}"); // get all tags

最后,我可以迭代所有标签,并使用我上面编写的RunGitCommand方法检查它们。对于每个迭代标记,我可以执行类似的操作,其中tag是我的标记列表中的单个元素。

git.RunGitCommand("checkout", $"tags/{tag}", $"{location}");