ดำเนินการคอมไพล์การคอมมิตก่อนการคอมเม้นท์หากไฟล์ในไดเรกทอรีบางตัวถูกแก้ไข


11

ฉันกำลังพยายามสร้างสคริปต์ทุบตีสำหรับขอคอมมิตการคอมไพล์ เมื่อใดก็ตามที่มีการคอมมิชชันฉันต้องการตรวจสอบว่าไฟล์ในไดเรกทอรีหนึ่งเป็นส่วนหนึ่งของไฟล์ staged หรือไม่และหากเป็นเช่นนั้นให้เรียกใช้คำสั่ง (งาน Grunt) จนถึงตอนนี้ฉันมีทุกอย่างทำงานยกเว้นการทำงานเฉพาะในกรณีที่มีการแก้ไขไฟล์บางอย่าง ฉันกำลังพยายามทำให้สิ่งนี้ทำงาน:

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

นี่เป็นข้อผิดพลาดที่ทำให้ฉันมีข้อผิดพลาด

คำตอบ:



8

ลองแบบนี้:

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

ดูเหมือนว่าจะเป็นคำตอบที่ยอมรับได้ แต่มันผิด ใน bash / sh แต่ละคำสั่งในไปป์ไลน์จะดำเนินการใน subshell แยกดังนั้นการออกในส่วนนั้นจะออกจาก subshell เท่านั้นรหัสใด ๆ ที่ตามหลัง fi จะยังคงถูกเรียกใช้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.