แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Git กับ Magento?

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

ฉันได้ดู git submodule และ git subtree แล้ว ฉันไม่คิดว่า git submodule จะใช้ได้กับสิ่งที่ฉันต้องการ Magento มีโครงสร้างต้นไม้ประเภทต่อไปนี้:

/app
  /code
     /community *
     /core
     /local *
  /design
     /adminhtml
     /frontend
        /base
        /yourtheme *
/lib
  /Zend
  /Varien
  /yourlib *
/js
  /yourjs *
  /varien
  /mage

การใช้ git submodule ดูเหมือนจะทำงานได้ดีที่สุดในโฟลเดอร์ที่แยกจากกัน (เช่น / เป็นแอปของคุณและ /vendor/magento เป็นโมดูลย่อย) อย่างไรก็ตาม ด้วยระดับของการเชื่อมโยงกัน โมดูลย่อยจึงดูเหมือนจะไม่ใช่วิธีแก้ปัญหาที่ดี ฉันผิดเรื่องนี้เหรอ?

นั่นทำให้ฉันมีทรีย่อยคอมไพล์ แต่สำหรับทรีย่อย git สมมติฐานหลักเดียวกัน (ที่สาขาผู้ขายเป็นทรีย่อยตามชื่อ) ไม่ถือเป็นจริง Magento ไม่ใช่แผนผังย่อย แต่เป็นไลบรารีหลักที่โปรเจ็กต์ของฉันพอดี ถูกต้องไหม?

หากวิธีการคอมไพล์ทั้งสองวิธีนี้ไม่ได้ผล มีวิธีอื่นที่ฉันควรรู้เกี่ยวกับสิ่งนั้นเพื่อทำสิ่งที่ฉันพยายามทำให้สำเร็จหรือไม่

ตัวเลือกสุดท้ายที่ฉันลังเลที่จะติดตามคือการมี repo ที่ฉันใช้กับการเปลี่ยนแปลงผู้ขายล่าสุด (ดึงมาจาก tarball) ฉันไม่เต็มใจที่จะติดตามสิ่งนี้เนื่องจากฉันรู้สึกว่ามีข้อมูลบันทึกของผู้ขาย (ดึงมาจาก https://github.com/magentomirror/magento-mirror) จะมีประโยชน์อย่างมากในการจัดเรียงการอัปเดตใหม่ๆ และค้นหาว่าการเปลี่ยนแปลงใดบ้างที่ส่งผลต่อฉัน


person acorncom    schedule 30.12.2010    source แหล่งที่มา
comment
นี่คือโพสต์บล็อกที่มีประโยชน์เกี่ยวกับเวิร์กโฟลว์ Magento/git ที่สมบูรณ์แบบ: dhmedia.com.au/blog/perfect-magento-workflow-using-git   -  person Sam152    schedule 24.12.2011


คำตอบ (5)


ฉันคิดว่าคุณสามารถใช้เครื่องมือ modgit สำหรับสิ่งนี้: https://github.com/jreinke/modgit คุณ' จะสามารถโคลนโมดูล Magento บางตัวได้ด้วยคำสั่ง modgit clone ดูตัวอย่างแบบเต็มได้ที่นี่: http://www.bubblecode.net/en/2012/02/06/install-magento-modules-with-modgit/

person Johann Reinke    schedule 01.03.2012
comment
หวาน. นั่นดูเหมือนกับสิ่งที่ฉันตามหาเลย ขอบคุณ!! - person acorncom; 02.03.2012

วิธีการเหล่านั้นที่คุณพูดถึงไม่ได้ผลสำหรับฉันจริงๆ ...

ขณะนี้ฉันกำลังใช้ pear เพื่อติดตั้งและจัดการการอัปเกรดคอร์และชุมชน และคอมมิตโครงสร้างวีโอไอพีทั้งหมดลงในที่เก็บ git ด้วยไฟล์ .gitignore ต่อไปนี้:

# Dynamic data that doesn't need to be in the repo
/var/*
/media/*
/downloader/pearlib/cache/*
/downloader/pearlib/download/*
/app/etc/use_cache.ser
local.xml

และใช้คำสั่งเชลล์ต่อไปนี้เพื่อเก็บไดเร็กทอรีว่าง:

for i in $(find . -type d -regex ``./[^.].*'' -empty); do touch $i"/.gitignore"; done;

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

ฉันพยายามจุดประเด็นในฟอรัมวีโอไอพี แต่ก็ไม่ได้รับการตอบกลับใด ๆ: http://www.magentocommerce.com/boards/viewthread/78976/

อัปเดต:

ตัวติดตั้ง Magento Composer - คุ้มค่าที่จะดู

Composer กลายเป็นเครื่องมือการจัดการการพึ่งพามาตรฐานสำหรับ PHP ดังนั้น คุณจะได้รับประโยชน์มากขึ้นจากการนำไปใช้ในโปรเจ็กต์ของคุณ

คุณไม่จำเป็นต้องคอมมิตหรือขยายสาขา ธีม libs ในแผนผังโปรเจ็กต์ของคุณ แต่มีเวอร์ชันและการขึ้นต่อกันที่เหมาะสมเสมอ

ขอบคุณ.

person wik    schedule 10.03.2011

ขั้นตอนการทำงานเหมือนผ้าห่ม

นี่คือสิ่งที่ก่อนหน้านี้ทำกับ quilt เหมือนกับที่คุณทำกับ Stacked Git ในปัจจุบัน (ที่ด้านบนของ Git ), คิว Mercurial (ด้านบนของ Hg) หรือ Loom (ด้านบนของ Bazaar)

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

Git เพียว

สิ่งต่อไปนี้ถือว่าคุณกำลังโคลน repo Magento Git หากพวกเขาไม่ใช้ Git คุณก็ยังสามารถทำได้โดยการแปลประวัติของพวกเขาเป็น Git ก่อน เช่น ด้วย tailor.

รีบูต

Git ทำให้ง่ายต่อการนำส่วนหนึ่งของประวัติไปใช้ใหม่จากจุดเริ่มต้นอื่น โดย การรีบูต ดังนั้นคุณจึงสามารถโคลน Magento ทำงานโค้ดของคุณ และเมื่ออัปเดต Magento ทำได้ตั้งแต่การแก้ไข Magento ครั้งล่าสุด จากนั้นจึงรีบูตงานของคุณในการแก้ไข Magento ใหม่ทั้งหมด

โดยพื้นฐานแล้วคุณติดตามเวิร์กโฟลว์ของ Quilt ด้วยเครื่องมือ Git ปกติ

สาขา

อีกวิธีหนึ่งในการทำเช่นนี้คือการใช้กิ่งก้าน คุณโคลน repo ของ Magento แยกสาขาออกมา ทำสิ่งที่คุณต้องการ และเมื่อคุณดึงข้อมูลการแก้ไขล่าสุดของ Magento คุณจะรวมทั้งสองสาขาเข้าด้วยกัน มันเป็นเพียงเวิร์กโฟลว์ DVCS ทั่วไป โดยพิจารณาว่าคุณเป็นนักพัฒนา Magento ที่ทำงาน สาขาฟีเจอร์ที่จะไม่มีวันไปถึงสาขาหลัก…

person Nowhere man    schedule 21.07.2011

คำถามของคุณเกี่ยวกับ submodule ของ git กับ subtree โดยทั่วไป ฉันไม่สามารถนึกถึงข้อมูลเฉพาะของ Magento ที่จะมีอิทธิพลต่อการเปรียบเทียบได้ ส่วนใหญ่คุณอาจทราบถึง กลยุทธ์การรวมทรีย่อย ซึ่งฉันจะแนะนำ แต่ฉันไม่แน่ใจว่าทำไมคุณต้องรวมตั้งแต่แรก

แนวปฏิบัติที่ดีที่สุดในการรวมคือการหลีกเลี่ยงและสถาปัตยกรรม Magento ก็มีความยืดหยุ่นเพียงพอที่จะอนุญาต ปฏิบัติตามชุดกฎง่ายๆ:

  1. หลีกเลี่ยงการแก้ไขรหัสผู้ขาย
  2. ถ้าคุณทำไม่ได้ ก่อนที่จะทำการแพตช์ ให้พิจารณาบรรจุการเปลี่ยนแปลงของคุณลงในโมดูล Magento แบบกำหนดเองและวางลงในแอป/โค้ด/ท้องถิ่น

หากการแก้ไขของคุณเกี่ยวข้องกับโค้ด PHP:

  1. คุณสามารถได้รับประโยชน์จาก OOP และลดการเปลี่ยนแปลงในวิธีการบางอย่างเท่านั้น ขยายชั้นเรียนตามลำดับ
  2. เขียนทับคลาสที่เกี่ยวข้องโดยใช้กลไกการกำหนดค่า Magento ใน config.xml
  3. หากก่อนหน้านี้เป็นไปไม่ได้ให้บรรลุผล ให้วางการเปลี่ยนแปลงของคุณ (คลาสที่แพตช์แล้ว) ลงใน app/code/local เช่น สูงกว่าในลำดับ include_path เพื่อให้โค้ดของคุณถูกใช้อย่างมีประสิทธิภาพแทนโค้ดของผู้ขาย

หากการแก้ไขของคุณเกี่ยวข้องกับเทมเพลต phtml -> ใช้กลไกเค้าโครง Magento เพื่อแทนที่ phtml ของผู้ขายด้วยของคุณ การปรับแต่งการออกแบบที่เหมาะสมจะต้องมีกิจกรรมการปรับเปลี่ยนอย่างหนักและงานเค้าโครงอยู่ดี

หากการแก้ไขของคุณเกี่ยวข้องกับ JS -> อีกครั้ง ให้ใช้เลย์เอาต์เพื่อลิงก์โค้ดที่อยู่ใน js หรือโฟลเดอร์ skin

person Yauhen Yakimovich    schedule 23.01.2011

ฉันคิดว่าคุณกำลังพูดถึงสิ่งต่าง ๆ

คำแนะนำของ Yauhen นั้นถูกต้องทั้งหมด คุณสามารถทำทั้งหมดนี้ให้สำเร็จได้ด้วยคอมไพล์ และคุณไม่จำเป็นต้องมีโมดูลย่อยหรือทรีย่อย

ฉันมีไฟล์ .gitignore เหมือนกับคุณ มันเลยดูดี

ฉันได้เขียนบทความเกี่ยวกับวิธีที่เราใช้ git เป็นทีมในการจัดการร้านค้าวีโอไอพีที่นี่ บางทีมันอาจจะมีประโยชน์สำหรับคุณ:

แนวทางปฏิบัติที่ดีที่สุดสำหรับการปรับใช้ Magento

person Greg Robbins    schedule 09.06.2011