จะสร้างไฟล์อัพเดต“ git push” บนเว็บโฮสต์ของคุณได้อย่างไร?


13

ฉันมีเว็บไซต์ไม่กี่แห่งที่โฮสต์อยู่ในบริการเว็บโฮสติ้งเดียวกันภายใต้การแชร์โฮสติ้ง ผู้ให้บริการพื้นที่เว็บของฉันรองรับ Git และฉันสามารถใช้ SSH ได้และฉันยังมีการตั้งค่า Git บนแล็ปท็อปของฉันเช่นกัน

ฉันต้องการให้มันเป็นแบบนั้นเมื่อฉันทำ "git push master origin" มันจะทำการอัปเดตไฟล์บนเว็บเซิร์ฟเวอร์ของฉันโดยอัตโนมัติและยังบันทึกการสำรองข้อมูลของไฟล์ที่คอมมิทไว้ก่อนหน้าด้วยดังนั้นฉันสามารถย้อนกลับได้อย่างง่ายดาย เป็นไปได้ไหม


อยากรู้อยากเห็น - ใครเป็นผู้ให้บริการโฮสต์ของคุณ?
ผู้ใช้

แล้วทำไมคุณถึงต้องการ "สำรองไฟล์การคอมมิทครั้งก่อน"? คุณสามารถผลักดันคอมมิชชันก่อนหน้าได้ถ้าคุณต้องการย้อนกลับ (สมมติว่าคุณรู้อยู่เสมอว่าอะไรที่คุณผลักไว้ - แต่คุณควรจะรู้ไว้ก่อน)
sleske

คำตอบ:


12

สรุปได้จากการใช้ Git เพื่อจัดการเว็บไซต์

กุญแจสำคัญในการดำเนินการคือเบ็ดด้านเซิร์ฟเวอร์ 'โพสต์ได้รับ' (เพิ่มเติมเกี่ยวกับ git hooks ที่Customizing Git - Git Hooksและหน้าคน githooks ) เบ็ดนี้ทำงานหลังจากเซิร์ฟเวอร์ได้รับข้อมูลทั้งหมด

เมื่อเซิร์ฟเวอร์ได้รับข้อมูลมันจะเรียกgit checkout -f ใช้ตัวเลือก -f จะบังคับชำระเงินให้กับส่วนหัวแม้ว่าจะมีความแตกต่างในท้องถิ่น

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

วางไว้ในhooks/ไดเรกทอรีเป็นpost-receiveและปฏิบัติการ แน่นอนเส้นทางเปลี่ยนไปเป็นตำแหน่งที่คุณมีไฟล์ของเว็บเซิร์ฟเวอร์ (การใช้GIT_WORK_TREEชุดตัวแปรสภาพแวดล้อมเพื่อให้คุณไม่จำเป็นต้องเล่นไฟล์ dot และการตั้งค่า git บนเซิร์ฟเวอร์)

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


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

@sleske คุณสามารถทำทุกอย่างในpost-receiveเบ็ดซึ่งเป็นเพียงสคริปต์ที่คุณสามารถใส่ในสิ่งที่คุณต้องการ
Mario

@Mario: ใช่คุณสามารถ - ซึ่งหมายความว่าคุณกำลังใช้งานโซลูชันการปรับใช้ของคุณเองอย่างมีประสิทธิภาพในฐานะเบ็ดหลังจากได้รับ ยังคงมีผลประโยชน์จากการใช้วิธีการแก้ปัญหาที่มีอยู่ แต่บางครั้งม้วนของคุณเองอาจจะดีที่สุด ...
sleske

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

0

วิธีที่ง่ายที่สุดในการอัปเดตแผนผังการทำงานของที่เก็บที่คุณกำลังกดเพื่อตั้งค่า git config receive.denyCurrentBranch updateInstead ที่ด้านผู้รับ ดู https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

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

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