태그 보관물: git-branch

git-branch

커밋 메시지에 Git의 브랜치 이름을 추가하는 방법은 무엇입니까? 해시로 자동

커밋 메시지에 git의 브랜치 이름을 해시로 자동 추가하는 Bash 스크립트에 대한 도움이 필요합니다.



답변

prepare-commit-msg또는 commit-msg githook을 사용하십시오 .

PROJECT/.git/hooks/디렉토리에 이미 예제가 있습니다 .

보안 조치로 사용하려는 각 저장소에서 이러한 후크를 수동으로 활성화해야합니다. 그러나 스크립트를 커밋하고 모든 복제본에서 .git/hooks/디렉토리 에 복사 할 수 있습니다 .


답변

commit-msg예를 들어 내 스크립트 는 다음과 같습니다 .

#!/bin/sh
#
# Automatically adds branch name and branch description to every commit message.
#
NAME=$(git branch | grep '*' | sed 's/* //')
DESCRIPTION=$(git config branch."$NAME".description)

echo "$NAME"': '$(cat "$1") > "$1"
if [ -n "$DESCRIPTION" ]
then
   echo "" >> "$1"
   echo $DESCRIPTION >> "$1"
fi 

다음 커밋 메시지를 생성합니다.

[branch_name]: [original_message]

[branch_description]

문제 번호를으로 사용하고 branch_name있으며 문제 설명은 branch_descriptionusing git branch --edit-description [branch_name]명령에 배치됩니다 .

지점 설명에 대한 자세한 내용은이 Q & A 에서 찾을 수 있습니다 .

코드 예제는 다음 Gist에 저장됩니다 .


답변

편집 하기 전에 커밋 메시지에 분기 이름을 추가하는 좀 더 간단한 스크립트입니다 . 따라서 변경하거나 제거하려면 할 수 있습니다.

.git / hooks / prepare-commit-msg 파일을 만듭니다 .

#!/bin/bash

branchPath=$(git symbolic-ref -q HEAD) #Somthing like refs/heads/myBranchName
branchName=${branchPath##*/}      #Get text behind the last / of the branch path

firstLine=$(head -n1 $1)

if [ -z "$firstLine"  ] ;then #Check that this is not an amend by checking that the first line is empty
    sed -i "1s/^/$branchName: \n/" $1 #Insert branch name at the start of the commit message file
fi


답변

prepare-commit-msg 및 pre-commit 후크를 조합하여 수행 할 수 있습니다.

.git / hooks / prepare-commit-msg

#!/bin/sh

BRANCH=`git branch | grep '^\*' | cut -b3-`
FILE=`cat "$1"`
echo "$BRANCH $FILE" > "$1"

.git / hooks / pre-commit

#!/bin/bash

find vendor -name ".git*" -type d | while read i
do
        if [ -d "$i" ]; then
                DIR=`dirname $i`
                rm -fR $i
                git rm -r --cached $DIR > /dev/null 2>&1
                git add $DIR > /dev/null 2>&1
        fi
done

권한 설정

sudo chmod 755 .git/hooks/prepare-commit-msg
sudo chmod 755 .git/hooks/pre-commit


답변

prepare-commit-msg 파일에 아래 코드를 추가하십시오.

#!/bin/sh
#
# Automatically add branch name and branch description to every commit message except merge commit.
#

COMMIT_EDITMSG=$1

addBranchName() {
  NAME=$(git branch | grep '*' | sed 's/* //')
  DESCRIPTION=$(git config branch."$NAME".description)
  echo "[$NAME]: $(cat $COMMIT_EDITMSG)" > $COMMIT_EDITMSG
  if [ -n "$DESCRIPTION" ]
  then
     echo "" >> $COMMIT_EDITMSG
     echo $DESCRIPTION >> $COMMIT_EDITMSG
  fi
}

MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l)

if [ $MERGE -eq 0 ] ; then
  addBranchName
fi

merge-commit을 제외한 커밋 메시지에 브랜치 이름을 추가합니다. merge-commit에는 기본적으로 분기 정보가 있으므로 추가 분기 이름이 필요하지 않으며 메시지를보기 흉하게 만듭니다.


답변

최상위 답변을 기반으로 한 Tim의 답변에 영감을 받아 prepare-commit-msg 후크가 어떤 종류의 커밋이 발생하는지 인수 로 취하는 것으로 나타났습니다 . 기본 prepare-commit-msg에서 볼 수 있듯이 $ 2가 ‘merge’이면 병합 커밋입니다. 따라서 케이스 스위치는 Tim의 addBranchName () 함수를 포함하도록 변경 될 수 있습니다.

브랜치 이름을 추가하는 방법과 기본 prepare-commit-msg.sample후크 의 주석 처리되지 않은 모든 부분에 대한 내 자신의 기본 설정을 포함 시켰습니다 .

커밋 메시지 준비

#!/bin/sh

addMyBranchName() {
  # Get name of current branch
  NAME=$(git branch | grep '*' | sed 's/* //')

  # First blank line is title, second is break for body, third is start of body
  BODY=`cut -d \| -f 6 $1 | grep -v -E .\+ -n | cut -d ':' -f1 | sed '3q;d'`

  # Put in string "(branch_name/): " at start of commit message body.
  # For templates with commit bodies
  if test ! -z $BODY; then
    awk 'NR=='$BODY'{$0="\('$NAME'/\): "}1;' $1 > tmp_msg && mv tmp_msg "$1"
  else
    echo "title\n\n($NAME/):\n`cat $1`\n" > "$1"
  fi
}

# You might need to consider squashes
case "$2,$3" in
  # Commits that already have a message
  commit,?*)
  ;;

  # Messages are one line messages you decide how to handle
  message,)
  ;;

  # Merge commits
  merge,)
    # Comments out the "Conflicts:" part of a merge commit.
    perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1"
  ;;

  # Non-merges with no prior messages
  *)
    addMyBranchName $1
  ;;
esac


답변

글로벌로 만들려면 (모든 프로젝트에 대해) :

만들기 git-msg의 내용에 파일 shytikov의 답변을 , 어떤 폴더에 넣어 :

mkdir -p ~/.git_hooks
# make it executable
chmod a+x ~/.git_hooks/commit-msg

이제 후크를 활성화합니다.

git config --global init.templatedir '~/.git_hooks'

그리고 git init다시 사용하려는 각 프로젝트에서.