【问题标题】:Is there some way to work with git using .NET application? [closed]有什么方法可以使用 .NET 应用程序使用 git 吗? [关闭]
【发布时间】:2011-03-25 12:09:57
【问题描述】:

我如何pull(也可以push)GitHub 上的某个文件夹?

我的意思是我需要 .NET 的 API 才能在 C# 中访问,而不是 git 的 GUI。

【问题讨论】:

标签: c# .net git


【解决方案1】:

然而,我所做的是编写一个简单的类库来通过运行子进程来调用 git 命令。

首先,为一些配置创建一个 ProcessStartInfo。

ProcessStartInfo gitInfo = new ProcessStartInfo();
gitInfo.CreateNoWindow = true;
gitInfo.RedirectStandardError = true;
gitInfo.RedirectStandardOutput = true;
gitInfo.FileName = YOUR_GIT_INSTALLED_DIRECTORY + @"\bin\git.exe";

然后创建一个进程来实际运行命令。

Process gitProcess = new Process();
gitInfo.Arguments = YOUR_GIT_COMMAND; // such as "fetch orign"
gitInfo.WorkingDirectory = YOUR_GIT_REPOSITORY_PATH;

gitProcess.StartInfo = gitInfo;
gitProcess.Start();

string stderr_str = gitProcess.StandardError.ReadToEnd();  // pick up STDERR
string stdout_str = gitProcess.StandardOutput.ReadToEnd(); // pick up STDOUT

gitProcess.WaitForExit();
gitProcess.Close();

现在由你来调用任何命令。

【讨论】:

  • 为了让编译器对这个类感到满意,我必须添加以下行:gitInfo.UseShellExecute = false;
  • 这不会在 ssh 上遇到麻烦,因为没有 ssh-agent 提供用于拉取和推入的密钥?
  • 请参阅this answer 到问题How to capture Shell command output in C#?,了解有关如何捕获标准错误和标准输出的详细信息;如果标准错误的输出大于相关缓冲区,这显然会失败。
  • 不要同步读出错误流(WaitForExit 之前的行)。如果两者都有数据就会死锁。
  • 这是一个很好的答案,对我来说效果很好,请注意,在 .Net Core 1.0 上,进程不支持关闭功能
【解决方案2】:

正如 James Manning 在当前接受的答案中的评论中提到的那样,库 libgit2sharp 是一个积极支持的项目,为 Git 提供 .NET API。

【讨论】:

  • 不幸的是,截至 2013 年 10 月,由于 Pull = Fetch + Merge 和 Merge 尚未编写,因此不完全支持 Pull。不过完成后会很棒! :-)
  • Merge 现在由 LibGit2Sharp 公开;-)(请参阅 #608
  • @KennyEvitt LibGit2Sharp 和 LibGit2Sharp-SSH 是两个不同的库 - 后者是 LibGit2Sharp 的一个分支,缺乏官方支持,破坏了 Nuget 包,通常是一个“离网”库。使用低级非托管代码时,除非您有封装 Native 函数的经验,否则您会遇到脱离网格的麻烦(内存泄漏、异常处理能力差)。
  • 截至 2020 年 1 月 lib2git 仍然是 does not handle long paths on windows。如果这是一个问题,你只需要掏出 git for windows。
  • @Liam 这似乎并不完全正确。当然,开发的频率要低得多,并且涉及的更改也较小,但这对于“成熟”的库或程序来说是非常典型的。就个人而言,这种事情不再困扰我。我经常使用“旧”代码并经常遇到对我根本不起作用的“新”代码。通常,最重要的标准是 是否遇到了可能无法解决的问题。 GitHub 项目中有 很多未解决的问题。
【解决方案3】:

我刚刚发现了这个:http://www.eqqon.com/index.php/GitSharp

GitSharp 是针对 Dot.Net 框架和 Mono 的 Git 的实现。它旨在与原始 Git 完全兼容,并且应该是一个轻量级库,适用于基于 Git 作为其对象数据库或以某种方式读取或操作存储库的酷应用程序......

【讨论】:

  • 正如该页面所述,他们已经停止了开发,因为 libgit2sharp 看起来更有希望 - github.com/libgit2/libgit2sharp
  • 不幸的是,截至 2013 年 10 月,libgit2sharp 不完全支持 Pull,因为 Pull = Fetch + Merge 和 Merge 尚未编写。不过完成后会很棒! :-)
  • @RussellGiddings 自从:Merge、Pull、Revert……现在暴露出来了 ;-)
  • 如今,libgit2sharp 是更好的选择 - 请参阅下面的答案。
猜你喜欢
  • 2023-01-07
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2022-11-06
相关资源
最近更新 更多