Chỉ thực hiện hook pre-commit hook nếu các tệp trong thư mục nhất định được sửa đổi


11

Tôi đang cố gắng tạo một tập lệnh bash cho hook git pre-commit. Bất cứ khi nào một cam kết được thực hiện, tôi muốn kiểm tra xem các tệp trong một thư mục nhất định có phải là một phần của các tệp được phân loại hay không và nếu có, hãy chạy một lệnh (tác vụ Grunt). Cho đến nay tôi có mọi thứ hoạt động, ngoại trừ chỉ chạy nếu một số tệp nhất định được sửa đổi. Tôi đang cố gắng để làm việc này:

SRC_PATTERN="site/assets/js/"
if [ grep --quiet $SRC_PATTERN `git diff --cached --name-only` ]
then
  echo "none"
  exit 0
fi

Điều này không may cho tôi lỗi.

Câu trả lời:


9

thử,

git diff --cached --name-only | if grep --quiet "$SRC_PATTERN"
then
    ...

Chúc mừng hack


8

Hãy thử nó như thế này:

SRC_PATTERN="site/assets/js/"
if git diff --cached --name-only | grep --quiet "$SRC_PATTERN"
then
  echo "none"
  exit 0
fi

Điều này trông rất giống câu trả lời được chấp nhận, nhưng điều đó là sai. Trong bash / sh, mỗi lệnh trong một đường ống được thực thi trong một lớp con riêng biệt, vì vậy một lối thoát trong phần sau đó sẽ chỉ thoát khỏi lớp con, bất kỳ mã nào theo fi vẫn sẽ được thực thi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.