git 커밋 메시지의 내용을 자동으로 실행할 수 있는 bash 스크립트

git 커밋 메시지의 내용을 자동으로 실행할 수 있는 bash 스크립트

일반적으로 Git의 하위 모듈에 대한 변경 사항을 커밋할 때(유일한 변경 사항인 경우) 커밋 메시지 본문에 결과를 제공합니다 ( git diff <submodule-name>git 구성에서 diff.submodule로 설정됨 ). log따라서 메시지는 다음과 같습니다.

Updated Core Submodule

Submodule Core eaedd3f..0721763:
  < Fixed ZA-123: Crash in rendering module
  < Merge 'develop' into 'master'

저는 git 구성의 별칭에 바인딩할 수 있도록 이를 자동화하는 스크립트를 작성하려고 했습니다. 위의 텍스트를 생성하려면 이상적으로 다음과 같은 명령을 실행하고 싶습니다.

$ git submodule-commit Core

이렇게 하면 대략 다음과 같은 작업이 수행됩니다.

  1. 지정된 하위 모듈에 대한 변경 사항을 준비합니다( Core이 경우).
  2. 하위 모듈의 변경 사항을 차별화하고 나중에 생성되는 메시지의 출력 텍스트를 저장합니다.
  3. 실행 git commit하고 제목 줄( Updated $1 Submodule또는 이와 유사한 내용, 이 경우 $1) 을 제공합니다 Core.
  4. 또한 이전에 저장된 diff 결과를 커밋 메시지에 추가합니다.

나는 이것에 대한 간단한 스크립트를 작성할 행운이 없습니다. 저는 bash/shell 스크립팅에 대한 경험이 많지 않습니다. 누구든지 이를 달성하기 위한 구현을 제공하는 데 도움을 줄 수 있습니까?

답변1

여기서 누락된 주요 구문은 다음과 같습니다.

git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"

$()전체 줄 바꿈이 포함된 커밋 메시지로 의 출력을 보내 려면 큰따옴표 안에 명령 대체 형식을 사용하세요 .git diff...git commit

제목 줄 앞에 접두사를 붙이는 printf대신 여기를 사용하고 있습니다. 왜냐하면 원격으로 복잡한 것(예: 내장된 이스케이프 처리)의 경우 기본적으로echoecho휴대용이 아니다, 역사적인 이유로 인해.

스크립트의 나머지 부분은 학생에게 연습 과제로 남겨집니다. :)

관련 정보