Tôi có một Git tiền cam kết móc mà ngăn cản tôi cam kết làm chủ trừ khi bị ghi đè, để khuyến khích phát triển trên chi nhánh.Làm cách nào để cho phép git merge cam kết làm chủ nhưng ngăn các cam kết không hợp nhất?
Tuy nhiên tôi muốn tự động cho phép hợp nhất các cam kết thành thạo. Có cách nào để xác định một cam kết hợp nhất từ kịch bản móc trước khi cam kết của tôi? Các kịch bản trông như thế này:
#!/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
SOLVED: Đối với bất cứ ai tìm kiếm một cắt-và-dán, phiên bản làm việc của kịch bản móc này là:
#!/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
Gợi ý: một cách mạnh mẽ hơn để có được nhánh hiện tại là 'branch = $ (git rev-parse --abbrev-ref HEAD)'. – Jubobs
Cảm ơn, tôi sẽ thử điều đó. –
@Jubobs: nói chung tốt hơn nên sử dụng 'git symbolic-ref HEAD'. Người ta có thể thêm '-q' nếu cần - nó sẽ nằm trong trường hợp này và sau đó bạn muốn thoát 0, vì vậy trong trường hợp * cụ thể * này, sử dụng' git rev-parse' cũng có thể tốt hơn: đầu bạn sẽ chỉ nhận được 'HEAD' trở lại, không khớp với' master'. – torek