首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程会玩 | 在.NET Core里操作Git

程会玩 | 在.NET Core里操作Git

作者头像
Edi Wang
发布2019-07-09 10:05:31
1.3K0
发布2019-07-09 10:05:31
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

Git是很多程序员的首选源代码版本控制工具,我最近也从TFVC切换到了Git,受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。

为啥要这么做

首先,这件事情的意义,并不是闲的蛋疼。我们确实有很多不错的Git客户端,如GitHub for Windows、VS/VS Code,Git GUI等,都相当成熟,没有必要自己再去用.NET/C#重新发明轮子。但在服务器上,可能你需要管理一个Git仓库,有自己的业务逻辑,Git仓库需要和其他系统流程整合,甚至想用ASP.NET写一个自己的GitHub出来,那么用.NET Core来操作Git就势在必行了。

LibGit2Sharp

我们不需要从零开始研究Git的原理,强大的.NET社区已经有了一个操作Git的库:LibGit2Sharp。它同时支持.NET Framework及.NET Core,我们需要用的就是它!

传送门:https://github.com/libgit2/libgit2sharp

这个库也能在NuGet上直接安装:

https://www.nuget.org/packages/LibGit2Sharp

首先,我们将它引入.NET Core工程

NuGet Package Manager (Visual Studio)

Install-Package LibGit2Sharp

.NET Core CLI

dotnet add package LibGit2Sharp

Clone 远程仓库

Repository.Clone() 方法可以拉取一个远程仓库到本地,等同于 git clone 命令。

Repository.Clone("https://github.com/EdiWang/EnvSetup.git", @"D:\EnvSetup");

创建本地仓库

Repository.Init() 方法可以在指定路径创建一个新的Git仓库,等同于 git init 命令。

Repository.Init(@"D:\GitRocks");

打开本地Git仓库

LibGit2Sharp.Repository 类型代表一个Git仓库,它可以只在内存中,也可以从一个本地路径加载,即包含".git"文件夹的目录。如我的博客项目 D:\GitHub\Moonglade

由于它实现了 IDisposable 接口,所以推荐使用using语句把对Repository的操作包装起来,以便于释放资源。

打开本地Git仓库很简单,将路径传给Repository的构造函数,就搞定了:

using (var repo = new Repository(@"D:\GitHub\Moonglade"))

{

}

检索 Branch

Repository.Branches 属性包含了当前仓库所有的分支信息。比如,我们要输出当前仓库有哪些本地和远程branch,就可以这么做:

using (var repo = new Repository(@"D:\GitHub\Moonglade"))

{

var branches = repo.Branches;

foreach (var b in branches)

{

Console.WriteLine(b.FriendlyName);

}

}

当然,除了分支的名称,还包括该分支底下的Commits等其他信息。

检索 Commits

通过遍历Branch.Commits,或Repository.Commits,可以获得完整的Commits历史记录信息:

foreach (var commit in repo.Commits)

{

Console.WriteLine(

$"{commit.Id.ToString().Substring(0, 7)} " +

$"{commit.Author.When.ToLocalTime()} " +

$"{commit.MessageShort} " +

$"{commit.Author.Name}");

}

要查找具体某一个Commit,可以使用Repository.Lookup<Commit>()方法:

var commit = repo.Lookup<Commit>("9fddbbf");

Console.WriteLine($"Commit Full ID: {commit.Id}");

Console.WriteLine($"Message: {commit.MessageShort}");

Console.WriteLine($"Author: {commit.Author.Name}");

Console.WriteLine($"Time: {commit.Author.When.ToLocalTime()}");

想要获取最新的Commit,访问Repository.Head.Tip即可。

var commit = repo.Head.Tip;

Console.WriteLine($"Commit Full ID: {commit.Id}");

Console.WriteLine($"Message: {commit.MessageShort}");

Console.WriteLine($"Author: {commit.Author.Name}");

Console.WriteLine($"Time: {commit.Author.When.ToLocalTime()}");

检索 Tags

和Branch类似,标签信息可以通过Repository.Tags属性得到:

foreach (var item in repo.Tags)

{

Console.WriteLine($"{item.FriendlyName} - {item.Target.Id}");

}

其他操作

以上例子演示了最常用的Git仓库信息检索操作,还有很多其他操作,如通过Repository.Ignore读写忽略文件,写入Commit、对比更改等,本文就不再一一赘述啦,大家可以自己探索~

参考:http://www.woodwardweb.com/git/getting_started_2.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档