.NET Core下操作Git,自动提交代码到

转自博客园(阿星Plus)

.NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟

回归正题,你想盖大楼吗?想 GitHub 首页一片绿吗?今天拿她玩玩自动提交代码至 GitHub。

安装项目模板

dotnet new --install "Microsoft.DotNet.Web.ProjectTemplates.3.0"
dotnet new worker

创建项目

直接使用 .NET CLI 创建一个 Work Service 的项目

dotnet new worker -o AutomaticPush

用 Visual Studio 2019 打开项目可以看到以下代码

// Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
  • 从 3.0 起 WebHost 被 Host 取代了
  • CreateHostBuilder创建 Host 并在ConfigureServices中调用.AddHostedService<Worker>()
// Worker.cs
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
} protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}

Worker 继承了 BackgroundService,在 override ExecuteAsync 方法中完成自动提交的代码

.NET 下操作 Git 需要用到一个库 LibGit2Sharp,同时支持 .NET Framework 及 .NET Core

在项目中安装使用

Install-Package LibGit2Sharp

LibGit2Sharp 简单使用

  • Repository.Init(@"D:\Work") 在指定路径创建一个新的 Git 仓库,相当于 git init

  • Repository.Clone("https://github.com/Meowv/Blog.git", @"D:\Work") 拉取一个远程仓库到本地,相当于 git clone

  • using (var repo = new Repository(@"D:\Blog")){} 打开本地存在的 Git 仓库

  • 获取 Branch

    using (var repo = new Repository(@"D:\Blog"))
    {
    var branches = repo.Branches; foreach (var item in branches)
    {
    }
    }
  • 获取 Commits

    using (var repo = new Repository(@"D:\Blog"))
    {
    foreach (var commit in repo.Commits)
    {
    }
    }
  • 获取 Tags

    using (var repo = new Repository(@"D:\Blog"))
    {
    foreach (var commit in repo.Tags)
    {
    }
    }
  • 更多操作请移步 https://github.com/libgit2/libgit2sharp

自动 Push 代码盖大楼

有了以上基础,就可以实现自动生成文件,push 代码到 GitHub 了。

新建一个配置文件,存放我们 GitHub 仓库以及账号密码等重要信息

{
"repository": "本地git仓库绝对路径",
"username": "GitHub账号",
"password": "GitHub密码",
"name": "提交人",
"email": "邮箱"
}

在ExecuteAsync中读取配置文件信息

var configurationRoot = new ConfigurationBuilder().AddJsonFile("config.json").Build();

var path = configurationRoot["repository"];
var username = configurationRoot["username"];
var password = configurationRoot["password"];
var name = configurationRoot["name"];
var email = configurationRoot["email"];

git会自动检测文件变化,所以就先自动按日期创建.log文件,不断生成内容然后提交

while (!stoppingToken.IsCancellationRequested)
{
var fileName = $"{DateTime.Now.ToString("dd")}.log";
var content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 写入内容
WriteText(path, fileName, content); using (var repo = new Repository(path))
{
// Stage the file
Commands.Stage(repo, "*");
// Create the committer's signature and commit
var author = new Signature(name, email, DateTime.Now);
var committer = author;
// Commit to the repository
var commit = repo.Commit(content, author, committer);
// git push
var options = new PushOptions
{
CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) =>
{
return new UsernamePasswordCredentials()
{
Username = username,
Password = password
};
})
};
repo.Network.Push(repo.Branches["master"], options);
} Console.WriteLine(content); // 等待60秒继续执行...
await Task.Delay(60000, stoppingToken);
} private static void WriteText(string path, string fileName, string content)
{
path = Path.Combine(path, DateTime.Now.ToString(@"yyyy\\MM"));
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var filePath = Path.Combine(path, fileName);
using var fs = new FileStream(filePath, FileMode.Append);
using var sw = new StreamWriter(fs);
sw.WriteLine(content);
}

至此,整个代码编写部分结束,项目发布后可以选择sc.exe注册为Windows服务,在这里推荐使用nssm(一个服务封装程序),好了,赶紧盖大楼去吧~~

# .NET Core下操作Git,自动提交代码到的更多相关文章

  1. .NET Core下操作Git,自动提交代码到 GitHub

    .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归正题,你想盖大楼吗?想 GitHub 首页一片绿吗?今天拿她玩玩自动化提交代 ...

  2. Eclipse IDE 使用指南:Git失误提交代码,撤销commit操作

    在Eclipse IDE使用Git Commit提交代码时把不需要的文件失误Commit了,比如.settings..classpath..project等文件. 如果是Commit提交代码到本地仓库 ...

  3. F12调试模式下使用console自动提交

    F12调试模式下使用console自动提交(F12 的console->输入代码->按enter即可运行) 1.使用定时器setInterval进行自动提交 //方法中可使用jquery调 ...

  4. 【Git】5、Git如何提交代码到远程仓库

    提交代码:如何把修改后的代码提交到远程仓库 文章目录 提交代码:如何把修改后的代码提交到远程仓库 1.同步远程代码 2.检查改动文件 3.添加文件到缓存 4.提交代码 5.推送代码 6.我的整个流程 ...

  5. git 本地提交代码到 github 远程库,没有弹框 github login

     git 本地提交代码到 github 远程库,没有弹框 github login:  原因: win10 有个凭据管理器,给保存了历史登陆用户名密码,导致无法切换用户. 解决办法: 删除历史登陆用户 ...

  6. Git push 提交代码到远程global user.name错误解决办法

    问题:安装了Git-1.9.4-preview和TortoiseGit等工具后,Git服务器开通了账号和密码并配置了邮箱.克隆了服务器代码到本地,按需求进行代码开发.提交本地代码到服务器时出现错误.具 ...

  7. 【git】提交代码到远程仓库

    看完不用,就是一个字:忘! 之前学了两天git结果今天要用的时候,啥也想不起来.... 场景: 已有远程仓库: git@192.168.1.1:test/test.git 要提交代码到远程仓库的新分支 ...

  8. Github的使用/git远程提交代码到Github

    Github的使用/git远程提交代码到Github Github是全球最大的社交编程及代码托管网站 Git是一个开源的分布式版本控制系统 1.基本概念 Repository(仓库):仓库用于存放项目 ...

  9. git第一次提交代码到远程仓库

    博客搬家了,本文新地址:http://www.zicheng.net/article/4 感谢支持 本操作说明是先有代码,后来创建git仓库,然后把本地代码提交到远程仓库的操作步骤: 1.初始化 在当 ...

随机推荐

  1. 电信NBIOT 5 - NB73模块下行测试(自己平台-电线平台-NB73)

    电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...

  2. 结对编程作业(java)

    结对对象:许峰铭 一.Github项目地址:https://github.com/Leungdc/Leungdc/tree/master/%E5%9B%9B%E5%88%99%E8%BF%90%E7% ...

  3. 利用Python模拟登录pastebin.com

    任务 在https://pastebin.com网站注册一个账号,利用python实现用户的自动登录和创建paste.该任务需要分成如下两步利用python实现: 账号的自动登录 paste的自动创建 ...

  4. 关于oracle PL/SQL存储过程 PLS-00905 object is invalid,statement ignored问题的解决

    昨天在学习oracle存储过程的时候,写了一个存储过程的demo,语句是这样的: )) AS psssal TESTDELETE.TESTID%TYPE; BEGIN SELECT TESTID IN ...

  5. lf 前后端分离 (2) 课程数据获取,Serializer的返回

    一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范  增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...

  6. win10系统易升更新不成功c盘也满了,解决方法

    删除临时更新文件: 1)同时按下Windows键和R键,打开运行,输入services.msc 2)找到WindowsUpdate服务项,右键选择禁用. 3)打开c:\windows\Software ...

  7. python 之Entry

    # Tkinter教程之Entry篇 # Entry用来输入单行文本 from tkinter import * root = Tk() # 创建entry Entry(root, text='inp ...

  8. 【目标检测】SSD:

    slides 讲得是相当清楚了: http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdf 配合中文翻译来看: https://www.cnb ...

  9. webapi简介及参数绑定

    介绍:WebAPI用来开发系统间接口的技术,基于HTTP协议,返回默认是json格式.比wcf简单 更通用,更轻量级,更省流量(json格式):WebAPI尽可能复用MVC路由.ModelBinder ...

  10. requests--请求头设置

    前戏 在我们进行自动化测试的时候,很多网站都会都请求头做个校验,比如验证 User-Agent,看是不是浏览器发送的请求,如果我们不加请求头,使用脚本访问,默认User-Agent是python,这样 ...