git 사전 커밋 후크를 만들려고 합니다. 이미 통합 브랜치와 병합된 경우 현재 브랜치에 대한 새 커밋을 허용하고 싶지 않습니다. 나는 이것을 가지고있다:
#!/usr/bin/env bash
git fetch origin dev
current_branch=`git rev-parse --abbrev-ref HEAD`
branches="$(git branch --merged dev | tr '@squashed' '')"
다음 두 가지 가지가 있다고 가정해 보겠습니다.
me/feature/x
me/feature/x@squashed
내가 원하는 것은 "@squashed"를 바꾸는 것이므로 다음과 같은 결과를 얻습니다.
me/feature/x
me/feature/x
그런 다음 현재 분기가 이러한 이름 중 하나로 시작하면 코드 1로 종료합니다.
문제는 다음과 같습니다
분기 이름이 해당 문자열로 끝나면 "@squashed"를 대체하기 위해 tr/sed를 사용하는 방법을 모르겠습니다.
현재 분기가 목록의 분기 이름 중 하나로 시작하는 경우 요소를 반복하고 0이 아닌 값으로 종료하는 방법을 알 수 없습니다.
답변1
tr
문자열이 아닌 단일 문자를 바꾸십시오. 추측한 대로 다음sed
을 사용하여 줄 끝의 문자열을 제거할 수 있습니다.git branch --merged dev | sed 's/@squashed$//'
루프를 사용하는 대신
grep
문자열 목록(한 줄에 하나씩)에 따옴표 붙은 문자열로 시작하는 줄이 포함되어 있는지 확인하세요.git branch --merged dev | sed 's/@squashed$//' | grep -q "^..$current_branch"
더 나은 방법은 this 을 사용하고 있으므로 git
필터링하도록 하는 것입니다.
git branch --list "${current_branch}*" --merged dev
dev
이름이 현재 분기로 시작하는 병합된 분기가 모두 나열됩니다 . (브랜치 이름의 시작 부분을 일치시켜 필터링하고 있기 때문에 빠진 것이 없는 한 "@squashed" 부분을 제거할 필요는 없습니다.)