git 不行用了为啥_程会玩 | 在.NET Core里操作Git

点击上方蓝字关注“汪宇杰博客”

ff52c0398cd47eefe16c72077d960b6f.png

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就势在必行了。

7a305f7918c85e46162e54f9793ede5f.gif

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

7e337681f47b092663caac97e9bd3786.gif

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

5989bf7b7abda241822485958a4d47f8.png

由于它实现了 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);

    }

}

eae690f09601d413056f069bb22beeec.png

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

a7adf765faccbee92afea21aad6a8034.png

检索 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}");

}

230252be24e587237b53200324155a9e.png

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

var commit = repo.Lookup("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()}");

c7b300d361d7ace94224b52848060a0c.png

想要获取最新的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()}");

61a0073ea379aa40fb99101b6c674873.png

检索 Tags

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

foreach (var item in repo.Tags)

{

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

}

10342ab2d3affe7273cf5678d0b9eeb9.png

其他操作

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

ce010aa264b655896c60b8bfed856adf.gif

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值