วิธีซิงค์ dir ท้องถิ่นกับเซิร์ฟเวอร์โดยใช้ Git


0

ฉันจะใช้ Git เพื่อซิงค์ dir ท้องถิ่นกับเซิร์ฟเวอร์ dir ได้อย่างไร

ฉันคุ้นเคยกับ FTP แต่ช้าและมีแนวโน้มที่จะเกิดข้อผิดพลาด

ฉันมี SSH เข้าถึงเซิร์ฟเวอร์ ฉันสามารถรัน Git บนเซิร์ฟเวอร์

ฉันต้องการหลีกเลี่ยงบริการโฮสติ้ง Git ของบุคคลที่สามเช่น Github หรือ Bitbucket ฉันต้องการอัพโหลดไปยังเซิร์ฟเวอร์ของฉันโดยตรง

คำตอบ:


2

บนเครื่องท้องถิ่น :

  1. เริ่มต้นไดเรกทอรีที่จะซิงค์เป็นที่เก็บ Git

    git init
    

    ยอมรับรหัสใด ๆ ที่มีอยู่

    git add -A
    git commit -am "initial commit"
    
  2. ตั้งค่ารีโมตไปยังเซิร์ฟเวอร์

    git remote set-url origin user@server:/path/to/dir/on/server
    

    ที่ไหน

    • userเป็นชื่อที่คุณใช้ SSH serverที่คุณ เช่น. root@10.10.10.10

    • /path/to/dir/on/server เป็นไดเรกทอรีบนเซิร์ฟเวอร์ที่คุณต้องการซิงค์การเปลี่ยนแปลงของคุณ

    หมายเหตุด้านข้าง: แนะนำให้ใช้รหัสผ่านน้อยกว่าสำหรับการเข้าสู่ระบบ SSH

บนเครื่องระยะไกล :

  1. เริ่มต้นไดเรกทอรีว่างบนเซิร์ฟเวอร์

    mkdir /path/to/dir/on/server
    cd /path/to/dir/on/server
    git init
    
  2. ตั้งค่าเพื่อละเว้นการอัปเดตเป็นสาขาที่เช็คเอาท์

    git config receive.denyCurrentBranch ignore
    

    สิ่งนี้เป็นสิ่งจำเป็นเพราะ (อ้างถึงข้อผิดพลาดที่แน่นอนที่คุณจะได้รับหากคุณไม่ทำเช่นนี้) "การอัปเดตสาขาปัจจุบันในที่เก็บที่ไม่ได้เปลือยจะถูกปฏิเสธเพราะจะทำให้ดัชนีและต้นไม้ทำงานไม่สอดคล้องกับสิ่งที่คุณผลักดัน และจะต้องมี 'git reset - ฮาร์ด' เพื่อให้ตรงกับแผนผังการทำงานกับ HEAD "(จริง ๆ แล้วเราจะทำแค่นั้นในขั้นตอนต่อไป)

  3. ตั้งค่า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สาขาจะผลักดันไปยังเซิร์ฟเวอร์

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