現在のブランチが改行で区切られたリストにあることを確認してください。

現在のブランチが改行で区切られたリストにあることを確認してください。

gitプリコミットフックを作成しようとしています。すでに統合ブランチとマージされている場合は、現在ブランチへの新しいコミットを許可したくありません。私はこれを持っています:

#!/usr/bin/env bash

git fetch origin dev
current_branch=`git rev-parse --abbrev-ref HEAD`
branches="$(git branch --merged dev | tr '@squashed' '')"

次の2つがあるとしましょう。

me/feature/x
me/feature/x@squashed

私が望むのは、「@squashed」を変更することなので、次のような結果が得られます。

me/feature/x
me/feature/x

その後、現在のブランチがこれらの名前の1つで始まる場合、コード1で終了します。

問題は次のとおりです。

  1. ブランチ名がその文字列で終わる場合は、 "@squashed"を置き換えるためにtr / sedを使用する方法がわかりません。

  2. 現在のブランチがリストのブランチ名の1つで始まる場合、要素を繰り返し、ゼロ以外の値で終了する方法はわかりません。

ベストアンサー1

  1. tr文字列ではなく単一文字を置き換えます。推測したように、次sedを使用して行末の文字列を削除できます。

    git branch --merged dev | sed 's/@squashed$//'
    
  2. ループを使用する代わりに、grep文字列リスト(1行に1つずつ)に引用符付きの文字列で始まる行が含まれていることを確認してください。

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

より良い方法はthisを使用しているので、gitフィルタリングすることです。

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

dev名前が現在のブランチで始まるマージされたブランチがすべて一覧表示されます。 (ブランチ名の先頭を一致させてフィルタリングしているため、欠けていない限り、「@squashed」部分を削除する必要はありません。)

おすすめ記事