การควบคุมเวอร์ชันสำหรับการพัฒนาโมดูล


22

ฉันสงสัยว่ามีการประชุมที่ดีหรือไม่เท่าที่การควบคุมเวอร์ชันดำเนินต่อไปสำหรับการพัฒนาโมดูลที่คุณใช้ทั้งในอินสแตนซ์ Magento เดียวและยังต้องการปล่อยเป็นโมดูลชุมชน

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

สิ่งที่ฉันกำลังทำอยู่ในขณะนี้คือการพัฒนามันภายในพื้นที่เก็บข้อมูลไซต์ของฉันและฉันวางแผนที่จะแยกมันออกเป็นที่เก็บแยกต่างหากในไม่ช้า ณ จุดนี้สิ่งที่ฉันน่าจะทำคือ:

  • สร้างในสภาพแวดล้อมท้องถิ่นของฉันภายในที่เก็บโมดูลแต่ละรายการโดยใช้ modman
  • คัดลอกการเปลี่ยนแปลงลงในที่เก็บไซต์เมื่อฉันพร้อมที่จะใช้รหัส

หวังว่าจะมีวิธีที่ดีกว่านี้ไหม?


คุณลองแต่งเพลงไหม
FlorinelChis

ฉันเล่นไปรอบ ๆ นิดหน่อย แต่ก็ไม่ได้ใช้มันมากนัก คุณชอบมันไหม?
kalenjordan

ใช่ Vinai มีการนำเสนอที่ Magento Meetup ล่าสุดในลอนดอนเกี่ยวกับนักแต่งเพลง การใช้มันจะแตกต่างกันไปในแต่ละกรณีโครงสร้างพื้นฐาน (เว็บเซิร์ฟเวอร์เดียว, เว็บเซิร์ฟเวอร์หลายแห่ง) ขึ้นอยู่กับความชอบ
FlorinelChis

คำตอบ:


16

เรามีบางโมดูลที่เราได้ทำสิ่งนี้และสิ่งที่เราทำคือ:

  • ติดตั้ง repo Git สำหรับโมดูล
  • ปรับใช้โมดูลนี้ในโค้ดเบสของไซต์ที่ใช้งานจริงและทำทุกสิ่งรวมถึง:
    • ซอฟต์ลิงค์ที่สร้างขึ้นโดย modman
    • ไดเร็กทอรี. modman ซึ่งเป็นที่เก็บโมดูลที่โคลน
  • ใช้ modman เพื่อ "ปรับใช้" ในเวอร์ชันอื่นและ / หรือสภาพแวดล้อม dev สำหรับ dev และการทดสอบ

ด้วยวิธีนี้ทำให้คุณมีความยืดหยุ่นที่คุณต้องการสำหรับการพัฒนาโมดูลรุ่นของรหัสในเว็บไซต์เดียวเช่นกันและหากคุณทำการเปลี่ยนแปลงโมดูลใน codebase เว็บไซต์เดียวคุณสามารถส่งกลับไปยังที่เก็บโมดูลได้โดยตรงตั้งแต่ repo นั้นมีอยู่ในไดเรกทอรี. modman

อัปเดต: เมื่อฉันเขียนสิ่งนี้ในตอนแรกฉันไม่ได้คำนึงถึงคำตอบของฉันว่า Git ไม่อนุญาตให้โมดูล (sub) มุ่งมั่นในพื้นที่เก็บข้อมูลซึ่งในกรณีนี้ "ทำทุกอย่าง" ต้องการความละเอียดบางอย่าง!

อนึ่งนี่เป็นเพราะฉันทำสิ่งนี้บ่อยขึ้นโดยใช้ modman ในการปรับใช้โมดูลที่อยู่ใน Git repos เป็น codebase ที่ผลิตโดย SVN …และการโค่นล้มนั้นไม่มีการป้องกันอย่างเด็ดขาดเพื่อป้องกันไม่ให้ต้นไม้ Git ทั้งหมดกับ VCS

ดังนั้นที่นี่ไป ...

  1. หากคุณกำลังใช้ SVN เพื่อเก็บรหัสของไซต์ที่ใช้งานจริงคุณไม่ควรมีปัญหาเนื่องจากการโค่นล้มมี (ในทางปฏิบัติ) ไม่มีแนวคิดของโมดูลย่อย ไม่เป็นไรหรอก

  2. หากคุณใช้ Git สำหรับรหัสของไซต์ที่ใช้งานจริงคุณจะต้องใช้โมดูลย่อยเพื่อ "ยอมรับทุกอย่าง" ไปยังที่เก็บรหัสของไซต์ หลังจากใช้ modman เพื่อโคลนสิ่งนี้:

    modman clone ssh://git@bitbucket.org/<user>/<repo>.git

    คุณจะต้องการเพิ่มเป็นโมดูลย่อยเช่น:

    git submodule add ssh://git@bitbucket.org/<user>/<repo>.git .modman/<repo>

    เมื่อคุณทำสิ่งนี้แล้วคุณควรจะสามารถเพิ่มไดเร็กทอรี. modman และไฟล์. gitmodules ให้กับดัชนีและทำการคอมมิท

    หลังจากการโคลนที่เก็บซึ่งใช้โมดูลเหล่านี้ติดตั้งผ่าน modman เพียงแค่เริ่มต้น submodules และอัพเดท:

    git submodule init
    git submodule update

ป.ล. ตอนนี้ฉันใช้ Git เต็มเวลาในโครงการใหม่ทั้งหมดดังนั้นหวังว่าการกำกับดูแลนี้จะไม่เกิดขึ้นอีก ขอโทษนะเพื่อน. ;)


ว้าวฟังดูน่าทึ่ง จะให้หมุนที่
kalenjordan

คุณเคยพิจารณา Submodules ในคอมไพล์แล้วหรือยัง?
FlorinelChis

Submodules ต้องการทุกอย่างอยู่ในไดเรกทอรีเดียว Modman สร้างลิงค์ที่นุ่มนวลสำหรับทุกสิ่งเป็นหลักทำให้มันสามารถแพร่กระจายไปทั่วโครงสร้าง dir
davidalger

เมื่อคุณบอกว่าให้คอมมิชชันทุกอย่างรวมถึงข้อมูล modman คุณหมายถึงการยอมรับ symlink ที่อยู่ในโครงสร้างไดเรกทอรีโครงการหรือไม่? เมื่อฉันgit add -Aนี่คือสิ่งที่ฉันได้รับ: monosnap.com/image/X1EoGyK12UQfYDUqA9hvpUUwq การใช้deployคำสั่งmodman ไม่ปรากฏว่าทำสิ่งใดแตกต่างจากcloneคำสั่ง - เพียงแค่เชื่อมโยงไฟล์ใน (แม้ว่ามันไม่จำเป็นต้องใช้ VCS) .
kalenjordan

ถูกต้องทุกอย่างรวมถึงลิงค์อ่อน ๆ ควรมีการบันทึกไว้ข้างต้น แต่ที่สำคัญที่นี่คือการเชื่อมโยงที่อ่อนนุ่มเป็นญาติเพื่อให้พวกเขาทำงานในสภาพแวดล้อมที่แตกต่างกัน modman รุ่นเก่าไม่รองรับ หากคุณไม่ยอมรับพวกเขาคุณจะต้องเพิกเฉยต่อสิ่งเหล่านี้และต้องทำให้แน่ใจว่าคุณมี modman อยู่แล้วเพื่อนำไปใช้กับสภาพแวดล้อมอื่น ๆ ภายในคอมไพล์จัดเก็บซอฟต์ลิงค์เป็นไฟล์ txt พร้อมพา ธ ที่จำเป็นในการสร้างลิงค์เมื่อโคลน
davidalger

7

ดูเหมือนว่าการประชุมปัจจุบันคือการให้การสนับสนุนสำหรับ:

เท่าที่โครงสร้างไดเรกทอรีมันเป็นขั้นต่ำและโดยเฉพาะอย่างยิ่งโมดูลที่ติดตั้งในกลุ่มรหัสชุมชน

โครงสร้างไดเรกทอรีแนะนำขั้นต่ำเปล่าจะเป็น:

.
└── app
    ├── code
       └── community
           └── YourCompany
               └── YourModule
                   ├── Block
                   ├── Model
                      └── Observer.php
                   └── etc
                       └── config.xml
    ├── design
       └── frontend
           └── base
               └── default
                   ├── layout
                      └── module.xml
                   └── template
                       └── yourmodule
    └── etc
        └── modules
            └── YourCompany_YourModule.xml

ตัวเลือก / นิสัยดี:

  • Github หน้า Landing Page พร้อมคำอธิบายภาพหน้าจอบางส่วนและคุณสมบัติที่มีสัญลักษณ์แสดงหัวข้อ
  • เชื่อมโยงไปยังร้านค้าตัวอย่างที่ติดตั้งจะดีเช่นกัน
  • ภาพรวม screencast / สองนาทีของผลิตภัณฑ์ของคุณ

แก้ไข: ฉันอาจเข้าใจผิด

การใช้ modman / gitignore ร่วมกันสามารถทำให้โมดูลโดดเดี่ยวจากสภาพแวดล้อมการทดสอบของคุณ การใช้โครงสร้างโฟลเดอร์ด้านบนคุณสามารถอนุญาตเฉพาะไฟล์โมดูลของคุณที่จะยืนยัน / ติดตั้งใน repo ของคุณ ในกรณีนี้คำตอบของดาวิดนั้นเหมาะสมกว่า Modman รองรับ dev / deploy ดูเหมือนว่าจะเป็นฉันทามติ


ขอบคุณ Phil ดูเหมือนว่าจะมีข้อมูลที่ดีพอ ๆ กับวิธีปฏิบัติที่ดีที่สุดในการพัฒนา / เผยแพร่โมดูล แต่คุณก็มองหาข้อมูลตามคำตอบของดาวิดมากขึ้น
kalenjordan

4
โหวตขึ้นสำหรับภาพวาด ASCII
Ben Lessani - Sonassi

@teamsonassi: ระวังนั่นอาจจะง่ายเหมือนการคัดลอกเอาท์พุทจากtreeคำสั่ง :-)
อเล็กซ์

ฉันไม่สนหรอกว่าเขาจะทำมันผ่านทางcowsay- ASCII เพียงแค่ทำให้คำตอบดูดี: D
Ben Lessani - Sonassi

จะ forewarned ผมใช้cowsayและfiglet.... มาก
philwinkle

5

แม้ว่าจะยังไม่ได้ลองด้วยตัวเองฉันก็อยากจะแนะนำให้ใช้นักแต่งเพลงแทน

การกำหนดเวอร์ชันรวมถึงการขึ้นต่อกัน

โดยเก็บcomposer.lockไฟล์ในพื้นที่เก็บข้อมูลที่คุณแก้ไขรุ่นของโมดูลทั้งหมดและสามารถเสมอเรียกคืนรุ่นที่เฉพาะเจาะจง (สาขาแท็กหรือรุ่นเก่า) โดยใช้ VCS คุณ ( git checkout, svn ..) composer.phar installแล้ว

ข้อเสีย

ปัญหาที่เกิดขึ้นคือการปรับใช้ของคุณสามารถขึ้นอยู่กับหลาย ๆ แหล่งได้อย่างง่ายดาย (ตัวอย่างเช่น GitHub) ที่สร้างความล้มเหลวหลายจุด

ดังนั้นเราจะต้องมีแคชหรือพร็อกซีบางอย่างที่เก็บโมดูลเหล่านั้นเพื่อให้เราสามารถปรับใช้ได้เสมอ

ตอบสนองดูเหมือนว่าจะสามารถให้บริการวัตถุประสงค์นี้ (ดูhttps://github.com/researchgate/broker ) และคำถามของฉัน/programming//q/16211671/288568


1
ขอบคุณ Artifact (ดูที่getcomposer.org/doc/05-repositories.md#artifact ) การขึ้นอยู่กับแหล่งที่มาที่แตกต่างกันนั้นง่ายต่อการลดและควบคุม นอกจากนี้ยังอนุญาตให้สถาปัตยกรรมปลั๊กอินของนักแต่งเพลงทำการแคชแพ็คเกจใน AWS (ไม่สามารถหาลิงก์ไปยังการติดตั้งได้)
Flyingmana

โมดูลไม่ควรไม่พึ่งพากันหรือไม่?
user2045

2

Kalen,

บางทีฉันอาจจะไม่ได้ทำตามขั้นตอนการทำงานของคุณ แต่ดูเหมือนว่าคุณกำลังพัฒนาวีโอไอพีคุณภาพเยี่ยมในพื้นที่จากนั้นก็แยกเป็น Modman Repo ทำไมไม่เพียงแค่แก้ไข. / modman/modulesname/CONTENTS ใน IDE ของคุณและกดรหัสไปยัง repo โมดูลอย่างอิสระในกระบวนการทำงานเดียวกันกับที่คุณใช้ในการพัฒนา คุณสามารถใช้ modman สำหรับการปรับใช้กับการผลิตคุณสามารถโต้ตอบกับ repo แต่ละรายการใน. modman / modulesname / โฟลเดอร์จาก cli หรือโดยการเพิ่มแหล่งที่มาของการกำหนดเวอร์ชันให้กับ IDE ของคุณแม้ว่าจะใช้. basedir จริงๆแล้ว webroot กำลังจะเล่นได้ดีขึ้น

นอกจากนี้ยังมีคุณสมบัติที่ดีจริงๆของ modman ที่หลายคนไม่ได้ใช้ สคริปต์ทุบตีตีความไฟล์. basedir ในที่เก็บ. modman หากไฟล์นั้นไม่มีอยู่ modman ใช้กฎ symlink ในไฟล์ modman ในระดับเดียวกับโฟลเดอร์. modman ... หากมีไฟล์. basedir อยู่ เนื้อหาอธิบายโฟลเดอร์ย่อยที่อยู่ในระดับบนสุดของรหัสวีโอไอพีของคุณลงมาจากเส้นทาง. modman ... ในคำอื่น ๆ คุณสามารถเรียกใช้ (และฉันทำ) เวอร์ชันวีโอไอพีพื้นฐานทั้งหมดในโฟลเดอร์เช่น 'BaseMagento1.9.1.0' 'BaseMagento1.14.2.0' และ modman ริเริ่มโฟลเดอร์ที่บรรจุสิ่งเหล่านี้ เพิ่มไฟล์. basir ลงในเส้นทาง. modman และคุณสามารถเปลี่ยนเนื้อหาได้อย่างง่ายดาย สิ่งนี้ทำงานได้ดีสำหรับการทดสอบเวอร์ชัน


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