หนึ่งจะจัดการการอ้างอิงภายนอกในโครงการโอเพนซอร์สได้อย่างไร


23

เมื่อมีคนเขียนโปรเจ็กต์โอเพนซอร์ซและใช้ Google Code หรือ GitHub และต้องการใช้ไลบรารี่อย่าง Lua ควรทำอย่างไร

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

ระบุว่าไลบรารีไม่จำเป็นต้องติดตั้งก่อนการรวบรวม

คำตอบ:


10

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


1
Submodules เป็นการใช้งานที่ค่อนข้างอ่อนแอของการพึ่งพาการจัดการทั่วไปและ Git อย่างน้อยทรี git คือการทำซ้ำที่ดีกว่ามาก
Lazy Badger

4
-1 โปรดระบุรายละเอียดของลิงก์ในคำตอบของคุณมิฉะนั้นคำตอบนั้นจะไร้ประโยชน์เมื่อลิงค์นั้นหายไป - อย่างที่เป็นอยู่ตอนนี้ น่าเสียดายที่ฉันยังไม่มีตัวแทนในการลงคะแนนเลย
Precastic

@Precastic: ถ้าคุณ google ลิงค์ข้อความมันจะพาคุณตรงไปยังหน้าใหม่ ฉันไม่แน่ใจว่าสามารถให้ข้อมูลได้มากเท่าใด
Bryan Agee

1
โปรดอ่านstackoverflow.com/help/how-to-answer - เฉพาะส่วนที่มีชื่อว่า "ระบุบริบทสำหรับลิงก์" (อ้างถึง: "อ้างอิงส่วนที่เกี่ยวข้องที่สุดของลิงก์สำคัญเสมอในกรณีที่เว็บไซต์เป้าหมายไม่สามารถเข้าถึงหรือออฟไลน์อย่างถาวร . ")
แม่นยำ

17

ควรพึ่งพารวมอยู่ในที่เก็บ?

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

ควรพึ่งพาสร้างจากภายในสคริปต์สร้างเดียวกันกับส่วนที่เหลือของโครงการหรือจากสคริปต์สร้างแยกต่างหาก

หากไม่มีเหตุผลที่ดีในการรวบรวมจากซอร์สให้ใช้เวอร์ชันที่คอมไพล์แล้ว

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

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


1
@ ผู้ส่งอีเมล: ฉันรู้ว่าหากคุณติดตั้งซอฟต์แวร์บนระบบ linux ตัวจัดการแพ็คเกจจะทำงานให้คุณทั้งหมด แต่นั่นต้องใช้การเชื่อมต่ออินเทอร์เน็ตและแพคเกจจะต้องอยู่ในรูปแบบที่แน่นอนและฉันระบุอย่างชัดเจนว่าเครื่องมืออัตโนมัติสามารถช่วยได้ คุณไม่สามารถใช้ระบบดังกล่าวสำหรับ. NET เครื่องมือโอเพนซอร์ส หากคุณดูที่เครื่องมือ sourceforge เช่น NHibernate หรือ Castle Windsor คุณจะเห็นว่าการพึ่งพาทั้งหมดนั้นไม่ได้รับการจัดให้เป็นไบนารี และนั่นเป็นสิ่งที่สมเหตุสมผลที่ต้องทำ
Falcon

1
@ ผู้ส่งอีเมล: โดยบังเอิญฉันต้องติดตั้ง OpenOffice SDK บนเครื่อง linux ที่นี่วันนี้ เนื่องจาก SDK ไม่สามารถติดตั้งผ่านผู้จัดการแพ็คเกจฉันจึงคว้า RPM จากเว็บไซต์ คุณคิดว่าอะไรคือข้อความแรกที่ฉันได้รับเมื่อพยายามเรียกใช้ "rpm - ติดตั้ง"ข้อผิดพลาด: การอ้างอิงที่ล้มเหลว: จำเป็นต้องมี ooobasis3.3-core01 โดย ooobasis3.3-sdk-3.3.0-9567.x86_64 - OH JOY!
Falcon

2
@ ผู้ส่งอีเมล: คุณพูดถูก แต่ในกรณีที่ฉันชอบที่จะมีความซ้ำซ้อนนี้หากการตั้งค่าและการติดตั้งเป็นเรื่องง่าย และเมื่อคุณต้องการเห็นนรกพึ่งพาให้ดูที่ไดเร็กทอรี / usr / lib มีทุกอย่าง: ความซ้ำซ้อนการโค่นล้มและคุณไม่รู้ด้วยซ้ำว่าโปรแกรมใดที่ใช้ libs แน่นอนให้ผู้จัดการแพคเกจจัดการกับมัน! แต่ถ้าผู้จัดการแพคเกจไม่สามารถจัดการได้เหมือนในกรณีสำนักงานเปิดฉันพูดถึง โดยทั่วไปหมายความว่าคุณเมาแล้วคุณจะติดตั้งยาก
Falcon

2
@ ผู้ส่งอีเมล: และยิ่งคิดถึงสิ่งนี้และประสบการณ์ของฉัน: ฉันไม่สามารถนับเวลาที่ฉันต้องสร้าง symlink ในไดเรกทอรีนี้ได้เพราะการอ้างอิงล้มเหลวหรือบางโปรแกรมปฏิเสธที่จะเรียกใช้แม้เมื่อติดตั้งผ่านผู้จัดการแพ็คเกจ บางทีสถานการณ์อาจจะดีขึ้นในตอนนี้ แต่บ่อยครั้งที่มันยังยากที่จะทำงาน ปัญหาที่สามารถหลีกเลี่ยงได้หากพวกเขาเพิ่งส่งมอบการพึ่งพากับแอปพลิเคชัน ฉันยินดีจ่ายพื้นที่เพิ่มเติมเพียงไม่กี่ MB เพื่อหลีกเลี่ยงความยุ่งยากนั้น
Falcon

2
@ ผู้ส่งอีเมล: บทเรียนจำนวนนับไม่ถ้วนบนเว็บเกี่ยวกับวิธีการติดตั้งโปรแกรมเฉพาะบนระบบลินุกซ์ที่เฉพาะเจาะจงเป็นพยานถึงปัญหานี้
Falcon

3

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

เรารวบรวมการอ้างอิงล่วงหน้าไว้ล่วงหน้าและย้ายไบนารีที่รวบรวมไว้ในโฟลเดอร์นั้น ห้องสมุดสาธารณะของเราเองก็ใช้วิธีนี้เช่นกัน ด้วยวิธีเดียวกันกับเทคนิคเดียวกันนี้สำหรับไลบรารีที่มีการรวบรวมไว้ล่วงหน้าไลบรารีโอเพนซอร์สและไลบรารีภายในองค์กร


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


1

ควรพึ่งพารวมอยู่ในที่เก็บ?

สามารถอ้างอิงในที่เก็บ (โดยวิธีการ SCM ใด ๆ ) หากการพึ่งพานี้เป็นส่วนที่สำคัญของผลิตภัณฑ์ (การพึ่งพาแหล่งที่มา) ไม่ใช่การพึ่งพาไบนารีซึ่งสามารถแก้ไขแยกต่างหาก

ควรพึ่งพาสร้างจากภายในสคริปต์สร้างเดียวกันกับส่วนที่เหลือของโครงการหรือจากสคริปต์สร้างแยกต่างหาก

ไม่สำคัญเลย คุณสามารถเลือกใช้วิธีใดก็ได้ตามความต้องการของคุณ (ความเร็ว / ความโปร่งใส / ความสามารถในการจัดการ / อื่น ๆ )


0

การเป็นร้าน Eclipse เราเพิ่งเริ่มใช้งานBuckminsterเพื่อจัดการกระบวนการสร้าง / ประกอบ / ปรับใช้ของเรา

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

ขั้นตอนต่อไปคือการย้ายที่svnเก็บเสาหินของเราไปยังชุดของโมดูลาร์gitเก็บ

ฉันไม่ทราบว่า buckminster จะทำงานร่วมกับgitsubmodules ได้ดีเพียงใด (หรือ Mercurial Subrepos สำหรับเรื่องนั้น) แต่มันก็ดีที่ Buckminster นั้นไม่เชื่อเรื่องพระเจ้าสำหรับ VCS ที่ใช้สำหรับองค์ประกอบใด ๆ ก็ตาม

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