2016-06-17 11 views
6

Tôi rất xấu khi chạy kịch bản lệnh shell (với bash), tôi đang tìm cách kiểm tra xem nhánh git hiện tại có phải là "x" không, và hủy bỏ kịch bản nếu nó không phải là "x".bash script để kiểm tra xem nhánh git hiện tại = "x"

#!/usr/bin/env bash 

    CURRENT_BRANCH="$(git branch)" 
    if [[ "$CURRENT_BRANCH" -ne "master" ]]; then 
      echo "Aborting script because you are not on the master branch." 
      return;  # I need to abort here! 
    fi 

    echo "foo" 

nhưng điều này là không hoàn toàn đúng

+2

Cho rằng mã của bạn không hợp lệ về cú pháp, [shellcheck. net] (http://shellcheck.net) nên là truy vấn đầu tiên của bạn. – mklement0

Trả lời

16

Sử dụng git rev-parse --abbrev-ref HEAD để lấy tên chi nhánh hiện tại.

Sau đó, nó chỉ là một vấn đề đơn giản là so sánh giá trị trong kịch bản của bạn:

BRANCH=$(git rev-parse --abbrev-ref HEAD) 
if [[ "$BRANCH" != "x" ]]; then 
    echo 'Aborting script'; 
    exit 1; 
fi 

echo 'Do stuff'; 
+1

Lưu ý phụ: 'git rev-parse --abbrev-ref HEAD' là cách phù hợp cho trường hợp này, nơi bạn muốn lấy lại thứ gì đó (và không phải lỗi) nếu HEAD hiện đang bị tách ra. Để phân biệt trường hợp HEAD tách rời, sử dụng 'git symbolic-ref HEAD' để thay thế. – torek

3

Bạn muốn sử dụng exit thay vì return.

4

Một lựa chọn sẽ được phân tích đầu ra của lệnh git branch:

BRANCH=$(git branch | sed -nr 's/\*\s(.*)/\1/p') 

if [ -z $BRANCH ] || [ $BRANCH != "master" ]; then 
    exit 1 
fi 

Nhưng một biến thể sử dụng git các lệnh nội bộ để chỉ lấy tên nhánh đang hoạt động như được đề xuất bởi @knittl ít bị lỗi hơn và thích hợp hơn

Các vấn đề liên quan