หากต้องการรวมเวอร์ชัน git เป็นหมายเลขบิลด์หรือไม่


12

เพื่อนร่วมงานและฉันได้ผลัดกันโต้วาที / อภิปรายปัญหา / ข้อดีของการรวมรุ่นที่ได้มาจากที่เก็บ git ปัจจุบันในรหัสของเราเมื่อใดก็ตามที่มันสร้าง

เราคิดว่าข้อดีคือ:

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

ปัญหาที่เกิดขึ้น (สำหรับเรา) รวมถึง:

  • ระบบสร้าง IDE ที่ได้รับ (เช่น MPLABX) สามารถทำให้ยากที่จะทราบว่าจะใส่ hooks ประเภทนี้ไว้ในที่ใด (และมันสามารถจบลงด้วยการทำวิเศษสุด ๆ ในตอนท้าย)
  • ทำงานได้มากขึ้นในการรวมสิ่งนี้เข้ากับ build สคริปต์ / makefiles
  • การเชื่อมต่อกับแนวทางการสร้างเฉพาะ (เช่นถ้าบุคคลหนึ่งสร้างด้วย XCode และ MPLABX อื่น ๆ ) อาจสร้างความประหลาดใจแบบดาวน์สตรีม

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

มีคำตอบที่ให้เหตุผลที่ดีที่สุดที่จะลงจอดบน?

คำตอบ:


15

เราใช้คอมไพล์อธิบายด้วยแท็กเวอร์ชัน การไหลเป็นพื้น:

  • สร้างแท็กสำหรับรุ่นที่เรากำลังทำงาน (เช่น v1.1.2)
  • ทุกบิลด์รัน git describe
  • เมื่อเราจัดส่งให้ใช้ชื่อแท็ก

git describeระบุชื่อแท็กจำนวนการกระทำตั้งแต่แท็กและแฮชของแท็ก แท็กตัวอย่างมีลักษณะดังนี้:

v1.1.2-6-a3b27gae

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

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

ขณะนี้เรามีเวอร์ชันที่ซับซ้อนกว่านี้เล็กน้อย แต่ความคิดยังคงอยู่


1
เพียงแค่หมายเหตุ: กัญชาในit describe(ส่วนสุดท้ายของสตริง) เป็นไม่ cset-ID ของแท็ก แต่กัญชาของการแก้ไขที่เราได้รับการอธิบาย ในรูปแบบที่มนุษย์อ่านได้v1.1.2-6-a3b27gaeจะเป็น "ชุดการเปลี่ยนแปลงหกชุดหลังจากเซ็ตการแก้ไขซึ่งติดแท็กเป็น v1.1.2-6 มีแฮชเซ็ตการแก้ไขสั้น ๆ a3b27gae"
Lazy Badger

@ LazyBadger - อย่างแน่นอน แฮชแท็กตัวเองเป็นประโยชน์น้อยกว่าเนื่องจากคุณสามารถได้อย่างง่ายดายหรือรายการที่แท็กของการกระทำด้วยgit checkout v1.1.2 git rev-list v1.1.2 | head -n 1
beatgammit

6

เราเคยเป็นร้านค้า SVN ดังนั้นคณิตศาสตร์นี้ง่าย - หมายเลขบิลด์คือ SVN rev และนั่นก็คือ เราพยายามทำสิ่งนี้ต่อไปเมื่อเราเริ่มย้ายไปยัง DCVSes และพบว่ามันล้มเหลวด้วยเหตุผลบางประการ

ก่อนอื่นใครจะรู้ว่า rev 69bc333bc8d8 เป็นก่อนหลังจากหรือพร้อมกันกับ rev 25b0f0d1052c? มีบริบทน้อยมากเมื่อเทียบกับระบบ SVN เมื่ออย่างน้อยคุณก็รู้ 101 ว่าหลังจากนั้น 100 วินาทีประการที่สองลักษณะของการควบคุมแหล่ง DCVS ทำให้สิ่งต่าง ๆ ไม่เป็นเส้นตรงในหลาย ๆ ทางเมื่อการสร้างครั้งต่อไปอาจไม่ก้าวหน้า

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


2

ฉันใช้ชุดรูปแบบต่อไปนี้สำหรับระบบสร้างสตูดิโอภาพของ C # DLL เพื่อสร้างหมายเลขรุ่นโดยอัตโนมัติ (เราเคยมีปัญหาเกี่ยวกับการปรับใช้ที่ไม่ได้ดำเนินการอย่างถูกต้องดังนั้นจำเป็นต้องมีวิธีที่สะอาดในการรับประกัน

  • เมเจอร์ - ฮาร์ดโค้ด 1 ซึ่งโดยทั่วไปแล้วจะถูกกำหนดโดยฝ่ายธุรกิจ
  • ไมเนอร์ - ฮาร์ดโค้ด 0 ซึ่งโดยทั่วไปแล้วจะถูกกำหนดโดยฝ่ายธุรกิจ
  • Revision - จำนวนวันตั้งแต่ 1 มกราคม 2010 (หรือวันที่เริ่มต้นอื่น ๆ โดยพลการ)
  • Build - ครึ่งจำนวนวินาทีนับตั้งแต่เที่ยงคืน (เนื่องจากเป็นตัวเลขที่ไม่ได้ลงชื่อ 16 บิต)

โปรดทราบว่าสิ่งนี้ถือว่าคุณมีตัวเลขที่ไม่ได้ลงชื่อ 16 บิตที่สามารถเล่นได้ 2 ตัว การสร้างระบบที่เทียบเท่าที่ใช้จำนวนน้อยก็สามารถทำได้เช่นกัน

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


2

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

https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state

คุณควรจะสามารถใช้ 3 ไฟล์เหล่านั้นเพื่อสร้างสถานะ lib SCM ของคุณเอง


0

ฉันจะแนะนำการใช้งานของAutorevision

คุณจะได้รับการส่งออกในรูปแบบที่หลากหลายเช่นส่วนหัวคสไตล์

นอกจากนี้ยังมีตัวอย่างเล็ก ๆ น้อย ๆ เกี่ยวกับวิธีที่คุณสามารถเชื่อมโยงสิ่งต่าง ๆ เพื่อไม่ว่าใครกำลังสร้างและวิธีที่พวกเขากำลังทำพวกเขาจะได้รับข้อมูลรุ่นเดียวกันเสมอแม้ว่าพวกเขาจะสร้างจาก tarball

นอกจากนี้เนื่องจากgitAutorevision ทำงานด้วยsvnและhgทำให้ง่ายต่อการสลับจาก svn โดยไม่ต้องเปลี่ยนมากเกินไปเมื่อคุณตั้งค่าไว้


น่าเสียดายที่เอกสารของ Autorevision ดูเหมือนจะไม่ให้คำแนะนำใด ๆ คุณใช้ / รวมข้อมูลจากส่วนหัว Autorevision ที่สร้างเพื่อสร้างสตริงรุ่นซอฟต์แวร์ที่ไม่ซ้ำกันและไม่ซ้ำกัน
Silicomancer

มันขึ้นอยู่กับว่าคนอ่านที่คุณต้องการ: <VCS_TAG>-<VCS_SHORT_HASH>, <VCS_TAG>-<VCS_TICK>หรือแม้กระทั่ง<VCS_ACTION_STAMP>จะให้งานทั้งหมด หากคุณต้องการรายชื่อเต็มของสิ่งที่แต่ละสัญลักษณ์เหล่านั้นเป็นผมจะแนะนำให้ตรวจสอบจากหน้าคน
dak180
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.