일반적으로 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
이렇게 하면 대략 다음과 같은 작업이 수행됩니다.
- 지정된 하위 모듈에 대한 변경 사항을 준비합니다(
Core
이 경우). - 하위 모듈의 변경 사항을 차별화하고 나중에 생성되는 메시지의 출력 텍스트를 저장합니다.
- 실행
git commit
하고 제목 줄(Updated $1 Submodule
또는 이와 유사한 내용, 이 경우$1
) 을 제공합니다Core
. - 또한 이전에 저장된 diff 결과를 커밋 메시지에 추가합니다.
나는 이것에 대한 간단한 스크립트를 작성할 행운이 없습니다. 저는 bash/shell 스크립팅에 대한 경험이 많지 않습니다. 누구든지 이를 달성하기 위한 구현을 제공하는 데 도움을 줄 수 있습니까?
답변1
여기서 누락된 주요 구문은 다음과 같습니다.
git commit -m "$(printf "Updated $submodule Submodule\n\n" ; git diff $submodule)"
$()
전체 줄 바꿈이 포함된 커밋 메시지로 의 출력을 보내 려면 큰따옴표 안에 명령 대체 형식을 사용하세요 .git diff...
git commit
제목 줄 앞에 접두사를 붙이는 printf
대신 여기를 사용하고 있습니다. 왜냐하면 원격으로 복잡한 것(예: 내장된 이스케이프 처리)의 경우 기본적으로echo
echo
휴대용이 아니다, 역사적인 이유로 인해.
스크립트의 나머지 부분은 학생에게 연습 과제로 남겨집니다. :)