บนเครื่องท้องถิ่น :
เริ่มต้นไดเรกทอรีที่จะซิงค์เป็นที่เก็บ Git
git init
ยอมรับรหัสใด ๆ ที่มีอยู่
git add -A
git commit -am "initial commit"
ตั้งค่ารีโมตไปยังเซิร์ฟเวอร์
git remote set-url origin user@server:/path/to/dir/on/server
ที่ไหน
หมายเหตุด้านข้าง: แนะนำให้ใช้รหัสผ่านน้อยกว่าสำหรับการเข้าสู่ระบบ SSH
บนเครื่องระยะไกล :
เริ่มต้นไดเรกทอรีว่างบนเซิร์ฟเวอร์
mkdir /path/to/dir/on/server
cd /path/to/dir/on/server
git init
ตั้งค่าเพื่อละเว้นการอัปเดตเป็นสาขาที่เช็คเอาท์
git config receive.denyCurrentBranch ignore
สิ่งนี้เป็นสิ่งจำเป็นเพราะ (อ้างถึงข้อผิดพลาดที่แน่นอนที่คุณจะได้รับหากคุณไม่ทำเช่นนี้) "การอัปเดตสาขาปัจจุบันในที่เก็บที่ไม่ได้เปลือยจะถูกปฏิเสธเพราะจะทำให้ดัชนีและต้นไม้ทำงานไม่สอดคล้องกับสิ่งที่คุณผลักดัน และจะต้องมี 'git reset - ฮาร์ด' เพื่อให้ตรงกับแผนผังการทำงานกับ HEAD "(จริง ๆ แล้วเราจะทำแค่นั้นในขั้นตอนต่อไป)
ตั้งค่าpost-receive
git hook :
สร้างไฟล์post-receive
ใน.git/hooks
ไดเรกทอรีและเปิดในตัวแก้ไข:
vim .git/hooks/post-receive
ใส่ต่อไปนี้ในมัน:
#!/bin/sh
git --git-dir=. --work-tree=.. checkout -f
ตั้งค่าโหมดเป็นปฏิบัติการ:
chmod +x .git/hooks/post-receive
นี่จะเช็คเอาต์การเปลี่ยนแปลงล่าสุดของคุณบนเซิร์ฟเวอร์ dir เมื่อใดก็ตามที่คุณผลักดันใด ๆ
หนึ่งซับสำหรับทุกอย่างที่กล่าวมา:
dir=<dir>; mkdir $dir && cd $dir && git init && git config receive.denyCurrentBranch ignore && printf '#!/bin/sh\ngit --git-dir=. --work-tree=.. checkout -f' > .git/hooks/post-receive && chmod +x .git/hooks/post-receive
ตอนนี้บนเครื่องโลคัลคุณสามารถทำได้:
git commit -am "Some changes"
git push
และ dir ท้องถิ่นของคุณจะถูกซิงค์กับเซิร์ฟเวอร์ dir
สูตรเพิ่มเติมที่ฉันใช้บ่อย: บนเครื่องท้องถิ่นฉันเก็บorigin
ชื่อระยะไกลสำหรับ Github / Bitbucket ซึ่งเป็น "บ้าน" ของโครงการและserver
ชื่อระยะไกลพิเศษซึ่งเป็นที่ที่มันถูกนำไปใช้ ฉันยังสร้างสาขา git (ซึ่งมีชื่อด้วย) server
และกำหนดค่าให้กดไปที่server
รีโมตเสมอ:
git config branch.server.remote server
git config remote.server.push server:master
วิธีนี้เมื่อใดก็ตามที่ฉันอยู่ในสาขาหลักจะผลักดันไปที่origin
(Github / Bitbucket ฯลฯ ) และเมื่อฉันอยู่ในserver
สาขาจะผลักดันไปยังเซิร์ฟเวอร์