这篇文章给大家介绍怎么在c#/>恢欣胓it命令行操作git仓库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强>最简单的运行git命令的代码强>
在。NET中,运行一个命令只需要使用<代码>的过程。开始代码>开启一个子进程就好了。于是要运行一个git <代码> 代码>命令,我们其实只需要这句足以:
Process.Start (“git",,“status");
当然,直接能简写成<代码> git> 代码是因为<代码> git。exe> 代码在我的环境变量里面,一般开发者在安装Git客户端的时候,都会自动将此命令加入到环境变量。如果没有,你需要使用完整路径<代码> C: \程序文件\ Git \ mingw64 \ bin \ Git。exe> 代码只是每个人的路径可能不同,所以这是不靠谱的。
<强>允许获得命令的输出强>
对于上节中写的<代码>的过程。开始> 代码,你一眼就能看出来这是完全没有用的代码。因为<代码> 代码>命git地位令只是获得仓库当前的状态,这个命令完全不影响仓库,只是为了看状态的。
所以,命令最好要能够获得输出。
而要获得输出,你需要使用<代码> ProcessStartInfo> 代码来指定如何启动一个进程。
var info =, new ProcessStartInfo (ExecutablePath,参数) {=,CreateNoWindow ,真的,=,RedirectStandardOutput ,真的,=,UseShellExecute ,假的,=,,WorkingDirectory  WorkingDirectory, };
需要设置至少这四个属性:
- <李>
<代码> CreateNoWindow 代码>表示不要为这个命令单独创建一个控制台窗口
李>实际上如果使用此代码的程序也是一个控制台程序,这句是没有必要的,因为子进程会共用父进程的控制台窗口;但是对于GUI程序来说,这句还是很重要的,这可以避免在执行命令的过程中意外弹出一个黑色的控制台窗口出来。
- <李>
<代码> RedirectStandardOutput 代码>进行输出的重定向
李>这是一定要设置为真正<代码> 代码>的属性,因为我们希望拿到命令的输出结果。
- <李>
<代码> WorkingDirectory 代码>设置工作路径
李>本来这是一个可选设置,不过对于<代码> git代码>命令来说,一般都是对一个已有的git仓库进行操作,所以当然要指定一个合理的git仓库了。
- <李>
<代码> UseShellExecute 代码>设置为<代码>假代码>表示不要使用<代码> ShellExecute 代码>函数创建进程
李>此属性的详细说明,
UseShellExecute的默认值是<代码> 代码>。
如果有以下需求,那么建议设置此值为假代码>:<代码>
- <李>
需要明确执行一个已知的程序
李> <李>需要重定向输入和输出
李>如果你有以下需求,那么建议设置此值为真或者保持默认:
- <李>
需要打开文档,媒体,网页文件等
李> <李>需要打开Url
李> <李>需要打开脚本执行
李> <李>需要打开计算机上环境变量中路径中的程序,
李>这里我们必须指定为<代码>假> 代码,因为要重定向输出的话,这是唯一有效值。顺便一提,此属性如果不设置,默认值是<代码> 代码>。
<强> CommandRunner 强>
为了方便起见,我将全部运行一个命令的代码封装到了一个<代码> CommandRunner> 代码的类当中。
using 系统; using System.Diagnostics; using 先; namespace Walterlv.GitDemo { public class CommandRunner ,{ public 才能string ExecutablePath {,得到;} public 才能string WorkingDirectory {,得到;} public 才能;CommandRunner (string executablePath, string workingDirectory =, null) {才能 ,,ExecutablePath =, ExecutablePath ? ?, throw new ArgumentNullException (nameof (executablePath)); ,,WorkingDirectory =, WorkingDirectory ? ?, Path.GetDirectoryName (executablePath); ,,} public 才能;string 运行(string 参数) {才能 ,,var info =, new ProcessStartInfo (ExecutablePath,参数) ,,{ ,,,CreateNoWindow =,真的, ,,,RedirectStandardOutput =,真的, ,,,UseShellExecute =,假的, ,,,WorkingDirectory =, WorkingDirectory, ,,}; ,,var process =, new 过程 ,,{ ,,,StartInfo =,信息, ,,}; ,,process.Start (); ,,return process.StandardOutput.ReadToEnd (); ,,} ,} }怎么在c#/net中利用git命令行操作git仓库