ฉันจะผลักดันที่เก็บ Git ไปยังโฟลเดอร์ผ่าน SSH ได้อย่างไร


53

ฉันมีโฟลเดอร์ชื่อ my-project ซึ่งฉันได้ทำgit init , git commit -aเป็นต้น

ตอนนี้ฉันต้องการที่จะผลักดันมันไปยังโฟลเดอร์ว่างที่ / mnt / foo / bar บนเซิร์ฟเวอร์ระยะไกล

ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันลองแล้วโดยดูจากสิ่งที่ฉันได้อ่าน:

cd my-project
git remote add origin ssh://user@host/mnt/foo/bar/my-project.git
git push origin master

ซึ่งดูเหมือนไม่ถูกต้อง (ฉันคิดว่าแหล่งที่มาจะมาก่อนปลายทาง) และล้มเหลว:

fatal: '/mnt/boxee/git/midwinter-physiotherapy.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

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

ขอบคุณ

คำตอบ:


56

คำสั่งถูกต้อง อย่างไรก็ตามที่อยู่ระยะไกลจะต้องชี้ไปที่ที่เก็บ Git ที่เริ่มต้นด้วย มันเป็นงานขาจร

ssh user@host "git init --bare /mnt/foo/bar/my-project.git"

(ใน Git พื้นที่เก็บข้อมูล "เปลือย" เป็นที่ที่ไม่มีแผนผังการทำงาน)


11

หากคุณต้องการผลักดันให้ repo และอัปเดตไฟล์บนเซิร์ฟเวอร์คุณสามารถสร้าง git hook ของฝั่งเซิร์ฟเวอร์เพื่อเช็คเอาต์ไฟล์หลังจากที่กดไปแล้ว ในไดเรกทอรีคอมไพล์เซิร์ฟเวอร์/hooks/สร้างไฟล์ชื่อpost-receiveและเพิ่มรหัสต่อไปนี้ (อัปเดตไดเรกทอรีเพื่อให้ตรงกับโครงสร้างโฟลเดอร์ของคุณ):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

จากนั้นให้สิทธิ์การใช้ไฟล์ที่เหมาะสม chmod +x post-receive

ข้อมูลเพิ่มเติม & คำอธิบายโดยละเอียดที่นี่: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps


2

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

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