C\#/.NET git 명령 행 을 사용 하여 git 창 고 를 조작 하 는 방법 예시

우 리 는 명령 행 에서 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 창 고 를 지정 해 야 합 니 다.
  • UseShellExecutefalse함수 생 성 프로 세 스 를 사용 하지 말 라 고 설정 했다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 ?? throw new ArgumentNullException(nameof(executablePath));
       WorkingDirectory = workingDirectory ?? Path.GetDirectoryName(executablePath);
      }
    
      public string Run(string arguments)
      {
       var info = new ProcessStartInfo(ExecutablePath, arguments)
       {
        CreateNoWindow = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        WorkingDirectory = WorkingDirectory,
       };
       var process = new Process
       {
        StartInfo = info,
       };
       process.Start();
       return process.StandardOutput.ReadToEnd();
      }
     }
    }
    테스트 및 결과
    이상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();
      }
     }
    }

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기