한 번에 여러 분기에 자동으로 git push를 수행하는 빠른 bash 스크립트를 작성하려고 합니다. 내 문제는 커밋 메시지를 읽기 변수로 입력하면 bash와 git이 공백으로 인해 미쳐버린다는 것입니다.
이것은 내 현재 스크립트입니다.
#!/bin/bash
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Pushing To all branches"
echo "What is your Commit Message?"
read message
git add *
git commit -m \"$message\"
git push origin
.... (push to other branches) ...
echo "Done!"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
내 커밋 메시지에 한 단어만 있으면 완벽하게 작동합니다. 그러나 이는 사실이 아닌 경우가 많습니다. 예를 들어, 다음을 입력하면:
Testing test case
내 커밋 메시지에 다음과 같은 오류가 발생합니다.
error: pathspec 'test"' did not match any file(s) known to git.
error: pathspec 'case"' did not match any file(s) known to git.
내 bash 스크립트가 공백을 처리할 수 있도록 이 문제를 해결하는 방법을 아는 사람이 있습니까?
매우 감사합니다!
답변1
주요 문제는 git commit -m
통화 메시지에 큰따옴표를 사용하는 것입니다.
주어진 명령줄은 문자열 git
인 경우 다음과 같습니다 .$message
some message here
git commit -m '"some' 'message' 'here"'
이는 큰따옴표 때문입니다.
대신 다음과 같이 작동합니다.
git commit -m "$message"
커밋 메시지 템플릿을 사용하세요.
파일에서 템플릿이 다음과 같다고 가정합니다 template.txt
.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Pushing To all branches
# What is your Commit Message?
...이렇게 하면 편집기의 커밋 메시지 상단에 이 내용이 삽입됩니다.
git commit -t template.txt
커밋 메시지를 편집할 수 있는 편집기를 제공하면 사용자가 올바른 커밋 메시지의 형식을 적절하게 지정하는 것이 더 쉬워집니다.
또한 사용하려는 템플릿 파일의 경로 이름을 commit.template
저장소 파일 .git/config
에 설정할 수도 있습니다( -t
현재는 필요하지 않음).
템플릿에서 다음으로 시작하는 모든 줄은 #
제출되지 않습니다.
또한보십시오: