我们可以在命令行中操作 git,但是作为一名程序员,如果在大量重复的时候还手动敲命令行,那就太笨了。
本文介绍使用 C# 编写一个 .NET 程序来自动化地使用 git 命令行来操作 git 仓库。
这是一篇很基础的入门文章。
最简单的运行 git 命令的代码
在 .NET 中,运行一个命令只需要使用 Process.Start
开启一个子进程就好了。于是要运行一个 git
命令,我们其实只需要这句足以:
Process.Start("git", "status");
当然,直接能简写成 git
是因为 git.exe
在我的环境变量里面,一般开发者在安装 Git 客户端的时候,都会自动将此命令加入到环境变量。如果没有,你需要使用完整路径 C:\Program Files\Git\mingw64\bin\git.exe
只是每个人的路径可能不同,所以这是不靠谱的。
允许获得命令的输出
对于上节中写的 Process.Start
,你一眼就能看出来这是完全没有用的代码。因为 git status
命令只是获得仓库当前的状态,这个命令完全不影响仓库,只是为了看状态的。
所以,命令最好要能够获得输出。
而要获得输出,你需要使用 ProcessStartInfo
来指定如何启动一个进程。
var info = new ProcessStartInfo(ExecutablePath, arguments) { CreateNoWindow = true, RedirectStandardOutput = true, UseShellExecute = false, WorkingDirectory = WorkingDirectory, };
需要设置至少这四个属性:
CreateNoWindow
表示不要为这个命令单独创建一个控制台窗口
实际上如果使用此代码的程序也是一个控制台程序,这句是没有必要的,因为子进程会共用父进程的控制台窗口;但是对于 GUI 程序来说,这句还是很重要的,这可以避免在执行命令的过程中意外弹出一个黑色的控制台窗口出来。
RedirectStandardOutput
进行输出的重定向
这是一定要设置为 true
的属性,因为我们希望拿到命令的输出结果。
WorkingDirectory
设置工作路径
本来这是一个可选设置,不过对于 git
命令来说,一般都是对一个已有的 git 仓库进行操作,所以当然要指定一个合理的 git 仓库了。
UseShellExecute
设置为false
表示不要使用ShellExecute
函数创建进程
此属性的详细说明,
UseShellExecute 的默认值是 true
。
如果有以下需求,那么建议设置此值为 false
:
- 需要明确执行一个已知的程序
- 需要重定向输入和输出
如果你有以下需求,那么建议设置此值为 true 或者保持默认:
- 需要打开文档、媒体、网页文件等
- 需要打开 Url
- 需要打开脚本执行
- 需要打开计算机上环境变量中路径中的程序
这里我们必须指定为 false
,因为要重定向输出的话,这是唯一有效值。顺便一提,此属性如果不设置,默认值是 true
。
CommandRunner
为了方便起见,我将全部运行一个命令的代码封装到了一个 CommandRunner
的类当中。
using System; using System.Diagnostics; using System.IO; namespace Walterlv.GitDemo { public class CommandRunner { public string ExecutablePath { get; } public string WorkingDirectory { get; } public CommandRunner(string executablePath, string workingDirectory = null) { ExecutablePath = executablePath "color: #ff0000">测试与结果以上
CommandRunner
命令的使用非常简单,new
出来之后,得到一个可以用来执行命令的实例,然后每次执行调用Run
方法传入参数即可。var git = new CommandRunner("git", @"D:\Developments\Blogs\walterlv.github.io"); git.Run("add ."); git.Run(@"commit -m ""这是自动提交的""");如果需要获得命令的执行结果,直接使用
Run
方法的返回值即可。比如下面我贴了
Main
函数的完整代码,可以输出我仓库的当前状态:using System; namespace Walterlv.GitDemo { class Program { static void Main(string[] args) { Console.WriteLine("walterlv 的自动 git 命令"); var git = new CommandRunner("git", @"D:\Developments\Blogs\walterlv.github.io"); var status = git.Run("status"); Console.WriteLine(status); Console.WriteLine("按 Enter 退出程序……"); Console.ReadLine(); } } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星1995《摇滚中国乐势力》首版引进版[WAV+CUE][983M]
- 陈思安《32首酒廊情调》2CD新雅(国际)影碟[WAV+CUE]
- 齐豫潘越云《回声》K2HD[正版原抓WAV+CUE]
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]