특정 작업을 수행하기 위해 git filter 분기를 사용하고 있습니다. sed 명령을 사용합니다. 간단한 정규식을 사용하면 모든 것이 잘 작동하지만 더 복잡한 경우에는 작동하지 않습니다. 어쩌면 정규식이나 이스케이프 문자에 실수가 있을 수도 있습니다. 도와주세요.
git filter-branch -f --msg-filter 'sed -e "s/\[PEM-2233\] Merge branch 'master' of https:\/\/bitbucket\.test\.domain\.com\/rrr\/pem\/hello-world into feature\/PEM-2233-do-acceptance-tests/CHANGED/"' -- --all
내가 캡처하려는 커밋 메시지는 다음과 같습니다.
[PEM-2233] Merge branch 'master' of https://bitbucket.test.domain.com/rrr/pem/hello-world into feature/PEM-2233-do-acceptance-tests
답변1
문제는 주변의 작은따옴표입니다 'master'
. 이 따옴표 중 첫 번째는 작은 따옴표로 시작하는 문자열을 끝냅니다 sed -e
. 견적 자체는 에 전달되지 않습니다 sed
.
이것은 질문에 해당합니다
$ echo '"hello 'user'"'
"hello user"
참조를 다음으로 변경합니다.
'\'master\''
(이 문자열은'master'
쉘에서 인용되지 않은 문자열로 처리됩니다.) 또는'"'master'"'
(이 문자열은'master'
쉘에서 큰따옴표로 묶인 문자열로 처리됩니다).
게다가 그런 일이 일어나지 않도록기울어진 이쑤시개 증후군, 명령에 다른 구분 기호를 사용하십시오 s
.
s#...#...#
답변2
작은따옴표는 중첩될 수 없습니다. 앞의 작은따옴표는 master
뒤에 오는 인용문을 닫습니다 --msg-filter
.
작은따옴표로 묶인 문자열 안에는 작은따옴표를 사용할 수 없으므로 문자열을 끝내고 따옴표를 올바르게 이스케이프 처리해야 합니다.
branch '\'master\'' of http