본문 바로가기
잡다한 문제 해결

Window OS에서 자동으로 commit을 하도록 예약하고 싶어요

by cuziam 2023. 5. 22.

작업 스케줄러과 배치파일로 자동 커밋을 구현해보자

발생한 문제

  • 내가 작성한 코드들이 특정 시간에 자동으로 커밋되도록 하고 싶은데, git에는 예약 기능이 없다.
  • 리눅스/유닉스 계열 OS에선 쉘 스크립트(.sh)를 만들고 cron이라는 작업스케쥴러를 이용하여 예약기능을 어느정도 구현할 수 있다던데, 문제는 현재 사용하는 OS가 window다. 나는 리눅스는 몰라도 window OS에 대해서 공부한 적은 없다...

목표

  1. 이상적인 목표: git의 명령어들을 저장해놨다가 정해진 시간에 동기화하여 실행하고 싶다.
  2. 최소 목표: 로컬파일들이 정해진 시간에 로컬에 커밋되도록 하고 싶다.

 

commit 예약기능은 왜 아직도 안 나왔는지 모르겠다. 1일 1커밋을 실천하려는 사람, 휴가 때도 커밋 이력을 남기고 싶은 사람, 그냥 안전하게 백업을 자동화하고 싶은 사람... 기타 등등 많은 사람들이 이 기능을 원할텐데 말이다. 아무튼 이것저것 검색해보고 공부해본 끝에 나름대로 방법을 찾아냈다.


해결하기

어디서 부터 시작하지...?

일단 생각해낸 컨셉은 이렇다. 리눅스/유닉스 계열에서 구현하는 방식과 유사하게 구현해보는 것이다.

 

필요한 과정을 크게 두 단계로 나누었다.

1. git 명령어들을 모아서 실행하는 스크립트 파일을 만들기.

2. 스케쥴러를 이용해서 특정 시간에 스크립트 파일을 실행하도록 스케쥴링.


git 명령어들을 모아서 실행하는 스크립트 배치 파일(.cmd)을 만들기.

윈도우 OS에 대해선 잘 몰라서 일단 그런 스크립트 파일이 있기는 한지 찾아봤다. 찾아보니 다행히 있다!

'.cmd' 라는 파일이 '.sh' 역할을 한다고 한다. 윈도우의 .bat파일도 하는 일이 거의 동일한데 windows NT이후에 사용하는 파일은 .cmd라고 한다. Okay Okay 그럼 이 .cmd파일을 만들어본다.

 

commit.cmd 파일을 만들고 코드 편집기(VS code)로 실행하려는 명령어를 작성한다.

일단 아무데나 '.cmd'로 이름이 끝나는 파일을 만든다. 그리고 코드 편집기로 실행하고자 하는 명령어들을 작성하고 저장한다. 코드 편집기는 notepad든 vscode든 아무거나 써도 된다. 나같은 경우 "commit.cmd"라는 파일을 만들고 위와 같은 명령어를 작성했다. 명령들을 간단하게 설명하면 이렇다.

  • working directory를 commit하려는 폴더로 옮기고
  • add와 commit을 실행한다.
  • 그리고 마지막에 pause로 프롬프트가 그냥 꺼져버리는 걸 방지했다.

 

*그리고 꼭 기억할 것!

명령어에 한글이 들어간다면(예를 들면 경로에 한글이 들어가는 경우) 인코딩을 반드시 EUC-KR로 바꾸고 저장해주자. 대개 아무 설정없이 파일들을 저장하면 UTF-8로 저장될텐데 그러면 명령프롬프트에서 한글을 잘못 읽는다. 왜냐하면 윈도우 명령프롬프트는 (짜증나게도) UTF-8을 사용하지 않고 EUC-KR(혹은 cp949)로 인코딩된 문자를 사용하기 때문이다.

 


스케쥴러를 이용해서 특정 시간에 스크립트 파일을 실행하도록 스케쥴링

1. 작업스케줄러를 검색해서 실행한다.

윈도우 좌측 하단에서 작업 스케줄러를 검색해서 실행하자.


2. 작업 스케줄러 우측의 작업 만들기를 누른다.


3. 자신이 실행할 작업의 이름을 붙인다. 나같은 경우 automated commit이라는 이름을 붙였다.

 


4. '트리거'에 들어간 후 새로 만들기를 누른다.


5. 스크립트를 실행할 시간을 정하고 확인을 눌러준다.


6. 그럼 이런 화면이 뜬다. 나는 매주 일요일 오후 6:30에 예약을 했다.


7. '동작'에 들어가서 새로 만들기를 누른다


8. 자신이 실행할 스크립트 파일을 찾는다.


9. 다 끝나면 확인을 누른다.


10. 그럼 이런 화면이 뜬다

 


11. 노트북을 사용하는 경우, 상단의 '조건'에 들어가서 목적에 맞게 '전원' 옵션을 변경시켜주자.


자신이 추가한 작업은 작업 스케줄러 라이브러리에서 볼 수 있다.

 


결과

생각보다 잘 되네?

일요일 오후 6시 30분이 되니까 명령 프롬프트 창이 잠시 켜지면서 프로그램이 실행된다. 이걸로 문제해결 완료!