การเยื้องของฉันคือการมีสคริปต์ที่อัปเดต submodules git ทั้งหมดตามสาขาที่ได้รับ หากไม่มีสาขาดังกล่าวสำหรับ submodule ระบบจะใช้ต้นแบบ
นี่คือสิ่งที่ฉันมีตอนนี้:
#!/bin/bash -x
if [ -z $1 ]; then
echo "Branch name required."
exit
fi
function pbranch {
exists=`git show-ref refs/heads/$branch`
if [ -z $exists ]; then
branch="master"
fi
git co $branch
git pull origin $branch
}
branch=$1
git submodule foreach pbranch
แต่เมื่อรันสคริปต์นี้ข้อผิดพลาดจะถูกโยน:
oleq@pc ~/project> git-fetchmodules major
+ '[' -z major ']'
+ branch=major
+ git submodule foreach pbranch
Entering 'submodule'
/usr/lib/git-core/git-submodule: 1: eval: pbranch: not found
Stopping at 'submodule'; script returned non-zero status.
ฉันเดาว่าgit submodule foreach
ใช้ eval (ตามเอกสาร ) ซึ่งฉันใช้ไม่ถูกต้องในบริบทนี้
มีตัวอย่างวิธีการใช้คำสั่งนี้กับ "การโทรกลับแบบอินไลน์" หลายพันล้านรายการแต่ฉันไม่พบรายการเดียวด้วยการติดต่อกลับในรูปแบบของฟังก์ชัน ความคิดวิธีการแก้ปัญหานี้?
git-pbranch-submodule
ก็สามารถทำตัวเหมือนในตัวคำสั่งคอมไพล์: หรือgit pbranch-submodule
git submodule foreach git pbranch-submodule
(โปรดทราบว่า foreach ยอมรับคำสั่งเชลล์และไม่ใช่คำสั่ง git)