簡體   English   中英

如何允許git merge commit to master但阻止非合並提交?

[英]How can I allow git merge commits to master but prevent non-merge commits?

我有一個Git預提交鈎子,除非被覆蓋,否則我無法承諾掌握,以鼓勵在分支上進行開發。

但是,我想自動允許合並提交掌握。 有沒有辦法從我的預提交鈎子腳本中識別合並提交? 該腳本如下所示:

#!/bin/bash

BRANCH=`git branch --color=never| grep '^*'|cut -c3-`

if [ "${BRANCH}D" == "masterD" -a "${GIT_COMMIT_TO_MASTER}D" != "trueD" ]
then
  echo "Commit directly to master is discouraged."
  echo "If you want to do this, please set GIT_COMMIT_TO_MASTER=true and then commit."
  exit 1
fi

求助:對於任何尋找剪切和粘貼的人來說,這個鈎子腳本的工作版本是:

#!/bin/bash

BRANCH=$(git rev-parse --abbrev-ref HEAD)

if [ "${BRANCH}" == "master" -a "${GIT_COMMIT_TO_MASTER}" != "true" ]
then
  if [ -e "${GIT_DIR}/MERGE_MODE" ]
  then
    echo "Merge to master is allowed."
    exit 0
  else
    echo "Commit directly to master is discouraged."
    echo "If you want to do this, please set GIT_COMMIT_TO_MASTER=true and then commit."
    exit 1
  fi
fi

我在其中添加了一些注釋,但重要的一點是,在預先提交的掛鈎中,您即將要測試的提交尚不存在,因此您無法計算其父項。

這是你得到的:

  • 如果您使用git commit --amend修改合並提交,則預提交掛鈎會照常運行,但它無法真正檢測到這種情況正在發生。 新提交將是合並,但你無法分辨。

  • 如果你使用常規的舊git commit來創建一個非合並提交,那么文件MERGE_HEAD將不會存在於git目錄中,你可以告訴它這不會創建一個合並提交。

  • 如果您使用git commit來完成沖突的合並,則文件MERGE_HEAD 存在,您可以告訴它將創建合並提交。

  • 如果你正在運行git merge並且它自己成功,它會在不使用pre-commit鈎子的情況下進行新的提交,所以你甚至不會在這里調用它。

因此,如果你願意允許git commit --amend在合並時git commit --amend ,你可以接近你想要的東西:只測試$GIT_DIR/MERGE_HEAD的存在,看看這是否是一個完成的git commit沖突的合並。 (即使命令在git樹外部運行,使用$GIT_DIR也是一個技巧$GIT_DIR設置$GIT_DIR以便掛機git命令可以正常工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM