วิธีการ Git-Ignore Symlinks บนโมดูล Magento ที่ติดตั้งโดยผู้แต่ง


11

composer.pharผมติดตั้งโมดูลใช้

นี้จะสร้างไฟล์ symlinks ในpublichtml/app/code/community(ตัวอย่าง) vendor/themodule...ที่มีเป้าหมายไปยัง

ในฉัน.gitignoreฉันไม่รวมไดเรกทอรีผู้ขาย - แต่แน่นอนว่าลิงก์จะยังคงอยู่ในคอมไพล์

มีวิธีที่ง่ายในการแยกลิงก์เหล่านั้นออกโดยอัตโนมัติหรือไม่? (นอกจากการเพิ่มทุกอย่างด้วยตนเองใน. gitignore)

ฉันต้องบอกว่าฉันมีบางrequire-devโมดูลที่ไม่ควรลงเอยบนเซิร์ฟเวอร์สุดท้าย - ดังนั้นการมีลิงก์เหล่านั้นจะมีอย่างน้อยก็ไม่ดี


1
สิ่งนี้จะนำไปใช้กับ modman ด้วยหรือไม่
philwinkle

ด้วย modman คุณโดยทั่วไปจะใช้ submodules git สำหรับแต่ละส่วนขยายและเพียงแค่เพิ่ม symlink ไปยังพื้นที่เก็บข้อมูล ไม่จำเป็นต้องแยกพวกเขาออกจากที่นั่นในทางกลับกันมันจะไม่สมเหตุสมผลในสถานการณ์การปรับใช้ modman เป็นส่วนใหญ่
Vinai

1
@philwinkle ฉันเพิ่งเริ่มต้นติดตาม Magento root ใน repo แยกต่างหากเพื่อเหตุผลด้านความปลอดภัย (เช่นตรวจจับไฟล์ที่แก้ไข) เพื่อติดตามการเปลี่ยนแปลงของ index.php และ Mage.php และสำหรับการอัพเกรด Magento ที่เกี่ยวข้องกับ modman เช่นเดียวกัน IMO .
ColinM

คำตอบ:


8

สิ่งที่ดีที่สุดที่ฉันทำได้คือทำงานหลังจากติดตั้ง / อัพเดทผู้แต่ง

$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore

ควรรันคำสั่งในไดเรกทอรีราก git มันเพิ่ม symlink ทั้งหมดไปยังไฟล์. gitignore ที่ไม่ได้อยู่ในนั้น


สิ่งนี้สร้างเส้นทางเหมือน./foo/bar.. ฉันคิดว่าเราต้องลบออกก่อน.- มันเหมาะกับคุณเช่นนั้นไหม
Alex

ทำงานได้ดีสำหรับฉันด้วยผู้นำ.ใช่ อื่น ๆ เพื่อช่วยเหลือ:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai

ที่จริงแล้วการทำลาย grep ... ก็อาจจะมีวิธีที่ดีในการทำความสะอาดเส้นทางต่อไป ...
Vinai

1
วิธีแก้ปัญหาง่าย ๆ : find * .... จะอัปเดตคำตอบของฉัน
Vinai

3

วิธีนี้เพิ่ม symlink ที่ไม่ได้ติดตามเท่านั้นจึงสามารถทำซ้ำได้โดยไม่ต้องเพิ่มรายการที่ซ้ำกัน symlink ที่อยู่ใน submodules หรือถูกเพิกเฉยไปแล้ว

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore;
    test -d "$f" && echo $f\* >> .gitignore;
done


1

โซลูชันที่รวมกันของ @ColinM และ @Vinai ที่เหมาะกับฉัน

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    if test -L "$f"
    then
        test -L "$f" && echo $f >> .gitignore;
    elif test -d "$f"
    then
        find ${f%/} -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
    fi
done

คุณสังเกตเห็นว่าโปรแกรมติดตั้งผู้แต่งเร็ว ๆ นี้ไม่รวมลิงก์
อเล็กซ์

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