현재 분기가 개행으로 구분된 목록에 있는지 확인하세요.

현재 분기가 개행으로 구분된 목록에 있는지 확인하세요.

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로 종료합니다.

문제는 다음과 같습니다

  1. 분기 이름이 해당 문자열로 끝나면 "@squashed"를 대체하기 위해 tr/sed를 사용하는 방법을 모르겠습니다.

  2. 현재 분기가 목록의 분기 이름 중 하나로 시작하는 경우 요소를 반복하고 0이 아닌 값으로 종료하는 방법을 알 수 없습니다.

답변1

  1. tr문자열이 아닌 단일 문자를 바꾸십시오. 추측한 대로 다음 sed을 사용하여 줄 끝의 문자열을 제거할 수 있습니다.

    git branch --merged dev | sed 's/@squashed$//'
    
  2. 루프를 사용하는 대신 grep문자열 목록(한 줄에 하나씩)에 따옴표 붙은 문자열로 시작하는 줄이 포함되어 있는지 확인하세요.

    git branch --merged dev | sed 's/@squashed$//' | grep -q "^..$current_branch"
    

더 나은 방법은 this 을 사용하고 있으므로 git필터링하도록 하는 것입니다.

git branch --list "${current_branch}*" --merged dev

dev이름이 현재 분기로 시작하는 병합된 분기가 모두 나열됩니다 . (브랜치 이름의 시작 부분을 일치시켜 필터링하고 있기 때문에 빠진 것이 없는 한 "@squashed" 부분을 제거할 필요는 없습니다.)

관련 정보