.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,自动提交代码到 GitHub的更多相关文章

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

    .NET Core下操作Git,自动提交代码到 转自博客园(阿星Plus) .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归 ...

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

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

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

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

  4. 如何利用git shell提交代码到github

    在很早之前我根据找到的一些资料以及自己的实践总结了一篇如何将VS2015上的代码上传到GitHub上,后来我发现有小伙伴私信我,说跟我上面写的不一样,但是那段时间也比较忙,当我发现有人私信的时候差不过 ...

  5. 使用git bash提交代码到github托管

    1.首先登录到https://github.com注册Github帐号,并且创建一个repository.  或者登录到  https://git.oschina.net/注册账号,并且创建一个rep ...

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

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

  7. Ubuntu下使用git提交代码至GitHub

    一.Ubuntu下安装Git Ubuntu12.04 LTS默认是已经安装Git的,可以使用 git --version 测试是否安装. 如果没有安装,使用命令: sudo apt-get insta ...

  8. git提交代码到GitHub操作-简易版(后续完善)

    一.git上传代码到GitHub 1.远程仓库GitHub创建好一个新仓库注意仓库名 2.本地建一个目录写代码,目录名与仓库命名一致 3.在目录下右键 git Bash here 打开git终端命令行 ...

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

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

随机推荐

  1. .netcore微服务-Mycat

      1.前言 1.1  分布式数据库 随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生. 分布式数据库特点包括: 透明性: ...

  2. Ubuntu 下载 Eclipse + tomcat 配置

    tomcat下载 去网站下载core中的 tar.gz的文件 下载之后依然转移到/opt文件夹然后进行解压 sudo cp apache-tomcat- /opt sudo tar -zxvf apa ...

  3. SP1805 HISTOGRA - Largest Rectangle in a Histogram 题解

    题目链接:https://www.luogu.org/problemnew/show/SP1805 分析: 我们可以用一个单调栈由低到高来存储它的高度,并用数组对每个高度记录一下它前面(包括它自己)一 ...

  4. delegate委托的例子,实现对Form中控件的更新

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

  6. svg文字描边动画

    svg动画在网页中是经常见到的,svg动画使得网页看起来清新美观 任何不规则图形都可以由svg绘制完成,当然也包括文字,文字本身就可以看作一个不规则图形

  7. 深入理解 JavaScript 单例模式 (Singleton Pattern)

    概念 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在. 核心:确保只有一个实例,并提供全局访问. 实现思路 一个类能返回对象一个引用(永远是同 ...

  8. Visual Studio 调试系列1 Debug 与 Release 模式

    系列目录     [已更新最新开发文章,点击查看详细] Debug 模式 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. 在Debug模式下调试,可以在断点处看到 ...

  9. IO-Java实现文件的复制

    public class FileCopy { public static void main(String[] args) throws IOException { // 1.创建一个字节输入流对象 ...

  10. [学习笔记] MySQL入门

    一.MySQL的安装与简单使用 ubuntu16.04下安装MySQL: sudo apt-get update sudo apt-get install mysql-server mysql-cli ...