Git: ดึงอัตโนมัติจากที่เก็บ?


91

มีวิธีใดบ้างในการตั้งค่าคอมไพล์เพื่อรับฟังการอัปเดตจาก repo ระยะไกลและจะดึงเมื่อใดก็ตามที่มีการเปลี่ยนแปลง กรณีการใช้งานคือฉันต้องการปรับใช้เว็บแอปโดยใช้ git (ดังนั้นฉันจึงได้รับการควบคุมเวอร์ชันของแอปพลิเคชันที่ปรับใช้แล้ว) แต่ต้องการวาง git repo "ส่วนกลาง" บน Github แทนที่จะเป็นบนเว็บเซิร์ฟเวอร์ (อินเทอร์เฟซของ Github นั้นดีมาก) .

มีใครทำงานนี้บ้าง? Heroku ทำได้อย่างไร? Google-fu ของฉันไม่สามารถให้ผลลัพธ์ที่เกี่ยวข้องกับฉันได้

คำตอบ:


49

Git มี "hooks" การดำเนินการที่สามารถดำเนินการได้หลังจากการกระทำอื่น ๆ สิ่งที่คุณกำลังมองหาคือ "เบ็ดหลังรับ" ในผู้ดูแลระบบ github คุณสามารถตั้งค่า url หลังการรับที่จะถูกตี (โดยมี payload ที่มีข้อมูลเกี่ยวกับสิ่งที่เพิ่งพุช) ทุกครั้งที่มีคนส่งไปที่ repo ของคุณ

สำหรับสิ่งที่คุ้มค่าฉันไม่คิดว่าการดึงอัตโนมัติเป็นความคิดที่ดี - จะเกิดอะไรขึ้นหากมีสิ่งผิดปกติเกิดขึ้นที่สาขาของคุณ? ฉันจะใช้เครื่องมือเช่นcapistrano(หรือเทียบเท่า) สำหรับสิ่งนั้น


12
กรณีการใช้งานที่วางแผนไว้ของฉันคือต้องมี repo / branch แยกต่างหากสำหรับขั้นตอน "การทดสอบและการยุ่งเกี่ยวกับ" dev และมี repo "push to production" แบบพิเศษที่ฉันผลักดันเพียงครั้งเดียวเท่านั้นที่ฉันแน่ใจว่าทุกอย่างทำงานได้ดี โดยพื้นฐานแล้วฉันใช้ Git เพื่อทำ rsync สามารถทำได้ยกเว้นมันจะเก็บบันทึกของเวอร์ชันทั้งหมดที่ได้รับการปรับใช้และฉันสามารถย้อนกลับไปเป็นเวอร์ชันก่อนหน้าได้อย่างง่ายดาย ข้อได้เปรียบเหนือสิ่งที่ไม่ยอมใครง่ายๆเช่นคาปิสตราโนคือฉันไม่ต้องเรียนรู้เครื่องมือใหม่ทั้งหมดสำหรับโครงการเล็ก ๆ (ณ ตอนนี้)
Li Haoyi

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

21

ในการกดไลค์แบบยูนิกซ์คุณสามารถสร้างงาน cron ที่เรียกว่า "git pull" (ทุกวันหรือทุกสัปดาห์หรืออะไรก็ได้) บนเครื่องของคุณ บน windows คุณสามารถใช้ตัวกำหนดตารางเวลางานหรือคำสั่ง "AT" เพื่อทำสิ่งเดียวกัน


3
ไม่ใช่วิธีที่เหมาะสมในการใช้ Git
เจาะลึก

27
@deepdive ทำไมไม่? ลองนึกภาพว่าคุณมี Rasperry Pi ตัวเล็ก ๆ อยู่ในบ้านและไม่มี IP แบบคงที่ คุณมีตัวเลือกอะไรอีกบ้างในการเรียกใช้ cron หรือ runwhen?
kaiser

2
ไม่ใช่ความคิดที่ดี เขาต้องการให้การเปลี่ยนแปลงมีผลทันทีหลังจากผลักดัน
boi_echos

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

3
วิธีที่รวดเร็วในการทำเช่นนี้โดยไม่ต้องเปลี่ยนแท็บ while true; do git pull; sleep 10; donecron: สิ่งนี้จะทำgit pullทุกๆ 10 วินาที ...
JakeD

3

มีโปรแกรมการผสานรวมอย่างต่อเนื่องเช่น Jenkins หรือ Bamboo ซึ่งสามารถตรวจจับการคอมมิตและทริกเกอร์การดำเนินการเช่นสร้างทดสอบแพ็กเกจและปรับใช้ พวกเขาทำในสิ่งที่คุณต้องการ แต่มันหนักด้วยการอ้างอิงยากที่จะกำหนดค่าและในที่สุดพวกเขาอาจใช้การตรวจสอบเป็นระยะ ๆ กับที่เก็บ git ซึ่งจะมีผลเช่นเดียวกับการเรียก git pull โดย cron ทุกนาที


0

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่คุณสามารถใช้ windows log และ git เพื่อดึงโปรเจ็กต์ของคุณโดยอัตโนมัติโดยใช้ webhook และ php (สมมติว่าโปรเจ็กต์ของคุณเกี่ยวข้องกับเว็บเซิร์ฟเวอร์ดูส่วนสำคัญของฉันที่นี่: https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

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