รับการแก้ไขเพียงครั้งเดียวจาก Git


14

การมีประวัติการแก้ไขแบบ Git อย่างเต็มรูปแบบมีประโยชน์มากมายซึ่งเป็นส่วนหนึ่งของกระบวนการพัฒนา

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

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

มีวิธีรับการแก้ไขเดียวจาก Git โดยที่ไม่มีประวัติหรือไม่?


1
คำถาม & คำตอบที่เกี่ยวข้องที่ SO stackoverflow.com/questions/26135216/…
Evgeny

คำตอบ:


16

โคลนตื้น

คุณสามารถเอาโคลนตื้น ๆ ออกจาก Git ได้โดยใช้:

git clone --depth=1 <url>

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

เก็บ Git

คุณยังสามารถใช้git-archiveเพื่อแยกเก็บถาวรของ repo:

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

ในตัวอย่างมันแสดงให้เห็นเช่น:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

สร้าง tarball ที่บีบอัดสำหรับการปล่อย

โฮสต์ Git, API เก็บถาวร

หากคุณกำลังโฮสต์ repo ของคุณบน GitHub คุณสามารถใช้API เก็บถาวรของพวกเขา:

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org มีฟังก์ชันการทำงานที่เหมือนกันสำหรับสิ่งนี้:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem คำสั่ง gzip อาจต้องเป็น gzip -c ....
Romeo Ninov

11

อย่าปรับใช้ repo git ของคุณ พัฒนาวิธีการใช้งานจริง แม้ว่ามันจะง่ายพอ ๆ กับการเรียกใช้ไฟล์เก็บถาวร (= การสร้างสิ่งประดิษฐ์ด้วยไฟล์ที่จำเป็นในการปรับใช้) ของสคริปต์ที่ปรับใช้

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

หมายเหตุ : สำหรับที่เก็บของภาษาสคริปต์ที่ไม่มีขั้นตอน "build" จริงๆวิธีที่ไม่สำคัญในการเผยแพร่สิ่งประดิษฐ์คือการจัดทำแพ็กเกจภาษาเหล่านั้นในไฟล์เก็บถาวรเช่น tar หรือ rpm จากนั้นเพื่อ "ปรับใช้" คุณจะยกเลิกการเก็บถาวรหรือติดตั้งรอบต่อนาที สิ่งนี้จะลบความจำเป็นในการใช้เครื่องมือคอมไพล์ในเชนการปรับใช้ของคุณ (ไม่ใช่เซิร์ฟเวอร์ prod ทั้งหมดที่จะมีเครื่องมือ dev เหล่านั้น)


ไม่เป็นไรที่จะถามคำถาม (หรือแม้แต่ท้าทาย!) คำตอบ - นั่นคือสิ่งที่ทำให้ Stack Exchange ยอดเยี่ยม :) สำหรับที่เก็บของภาษาสคริปต์ที่ไม่มีขั้นตอน "สร้าง" เป็นวิธีที่ไม่ยุ่งยากในการเผยแพร่สิ่งประดิษฐ์ พวกเขาในที่เก็บถาวรเช่น tar หรือ rpm จากนั้นเพื่อ "ปรับใช้" คุณจะยกเลิกการเก็บถาวรหรือติดตั้งรอบต่อนาที สิ่งนี้ทำให้ไม่จำเป็นต้องใช้เครื่องมือคอมไพล์ในโซ่การปรับใช้ของคุณ (เซิร์ฟเวอร์ prod บางอันจะไม่มีเครื่องมือ dev เหล่านั้น)
RubyTuesdayDONO

1
@ Pierre.Vriens ใช่คุณกำลังพลาดสิ่งที่แนะนำในการนำไฟล์เก็บถาวรมาใช้เช่นสร้างสิ่งประดิษฐ์ด้วยไฟล์ที่จำเป็นในการปรับใช้ ที่กล่าวว่าฉันยอมรับว่าไม่ใช่คำตอบที่มีคุณภาพและจุดนี้ควรขยาย เราอยู่ในรุ่นเบต้าส่วนตัวและคำตอบควรชัดเจน
Tensibai

จากนั้นฉันไม่เห็นว่าสิ่งนี้นำเสนอมากกว่าคำตอบที่ยอมรับได้อย่างไรหากมันชี้ไปที่ที่เก็บถาวรพอดี ... มันซ้ำซ้อนคุณควรแก้ไขเพื่อขยายในลักษณะนี้ iMHo
Tensibai

1
โปรดตรวจสอบคำตอบของฉันแก้ไข (เพียงรวมความคิดเห็นที่น่าสนใจของคุณ) รู้สึกอิสระที่จะปรับปรุง / ทำงานซ้ำแน่นอนหรือเพียงแค่ย้อนกลับหากคุณไม่ชอบการแก้ไขของฉันเลย BTW: ความคิดเห็นของคุณ (= หมายเหตุฉันเพิ่ม) ทำให้ฉันคิดว่า "จริงๆแล้วมันง่ายหรือเปล่าอีกตัวอย่างของวิธีที่เราทำสิ่งต่าง ๆ ใน zOS ... ด้วย z สำหรับการหยุดทำงานเป็นศูนย์ ... " ฉันคิดว่าถึงเวลาที่จะเริ่มถามคำถามเพิ่มเติม / คำตอบผ่านความคิดเห็นที่คล้ายกัน ... อย่าท้าทายฉันมากเกินไป ...
Pierre.Vriens

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

6

คำถามมีวิธีใดที่จะได้รับการแก้ไขครั้งเดียวจาก Git โดยที่ไม่มีประวัติ?

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

เพื่อหลีกเลี่ยงความสับสน: การโคลนตื้นได้รับประวัติที่ต้องการแล้วตัดทอนไปยังพื้นที่ว่างต้นไม้ยังคงทำจากประวัติ

สำหรับการแก้ปัญหาคำตอบ @ 7ochem ไม่ครอบคลุมพวกเขา

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