Mục tiêu là để có được một trạng thái rõ ràng có thể được đánh giá trong một lệnh shell.
Tôi đã thử git status
nhưng nó luôn trả về 0, ngay cả khi có các mục cần cam kết.
git status
echo $? #this is always 0
Tôi có một ý tưởng nhưng tôi nghĩ nó là một ý tưởng tồi.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
bất kỳ cách nào khác?
cập nhật với giải quyết sau đây, xem bài viết của Mark Longair
Tôi đã thử điều này nhưng nó gây ra một vấn đề.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Tôi nhận được lỗi sau đây [: ??: binary operator expected
Bây giờ, tôi đang nhìn người đàn ông và thử git diff.
=================== mã cho hy vọng của tôi và hy vọng câu trả lời tốt hơn ======================
#if [ `git status | grep -i -c "$"` -lt 3 ];
# change to below code,although the above code is simple, but I think it is not strict logical
if [ `git diff --cached --exit-code HEAD^ > /dev/null && (git ls-files --other --exclude-standard --directory | grep -c -v '/$')` ];
then
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
exit 1
else
exit 0
fi
$(git status --porcelain)
, giống như tôi đã nói với bạn!
$(git status --porcelain)
. Ngoài ra, nếu bạn muốn đặt dấu chấm than trong tin nhắn của mình, bạn sẽ cần sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép - nghĩa làecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
thay vào đó