Git push / clone ไปยังเซิร์ฟเวอร์ใหม่


127

ฉันเพิ่งเรียนรู้ Git และมีบางอย่างที่ฉันไม่สามารถทำได้ หลังจากสร้างและใช้ที่เก็บ git ในเครื่อง Mac ของฉันฉันสามารถส่งสำเนาไปยังเซิร์ฟเวอร์อื่นที่อื่นได้หรือไม่ ฉันอยู่หลังไฟร์วอลล์ดังนั้นฉันจึงไม่สามารถเรียกใช้git cloneจากเครื่องอื่นได้

คำตอบ:


137
  1. git remote add ชื่อ url
  2. git push ชื่อ สาขา

ตัวอย่าง:

git remote add origin git@github.com:foo/bar.git
git push origin master

ดูเอกสารสำหรับgit push- คุณสามารถตั้งค่ารีโมตเป็นรีโมตเริ่มต้นสำหรับสาขาที่กำหนด ถ้าคุณไม่ได้ชื่อoriginเป็นพิเศษ เพียงgit pushคนเดียวจะทำเช่นเดียวกับgit push origin สาขานี้ (สำหรับสาขาที่คุณอยู่)


7
เพื่อให้ได้ผลที่ใกล้เคียงกว่าในฐานะ"push cloning"แทนที่จะเป็นเพียงpushinh a _branch_ : git push -u --allเราสามารถละเว้นได้originเนื่องจากเป็นชื่อสมมติเริ่มต้นสำหรับการพุชและ-uจะติดตามสาขาระยะไกลด้วย
cregox

13
มันควรจะเพียงพอที่จะสร้างที่เก็บเปล่าเปล่าที่เซิร์ฟเวอร์โดยใช้git init --bare /foo/bar.gitแล้วพุชที่เก็บในเครื่องของคุณที่นั่น (เช่นในคำตอบนี้) คุณไม่จำเป็นต้องถ่ายโอนอะไรด้วยซิป / ฉีกไปยังเซิร์ฟเวอร์
OderWat

1
OderWat ที่สอง ตัวอย่างเช่นทำ 'git init --bare foo / bar.git' ในขณะที่ล็อกอินเข้าสู่รีโมต (เช่น git@github.com) จากนั้น "remote origin" จะมีปลายทางที่จะส่งเข้าไป สำหรับตัวอย่าง github ฉันคิดว่าคุณสามารถใช้เว็บอินเตอร์เฟส Repository / Add ของ github จากนั้นทำตามคำแนะนำ "พุชที่เก็บที่มีอยู่จากบรรทัดคำสั่ง" ที่มีให้ Github แนะนำ '-u' เพื่อทำให้เกิดการอ้างอิงการติดตาม
Dave X

วิธีนี้อาจเป็นวิธีที่ยอมรับได้ แต่เป็นป้านและทำให้ใช้งานได้น้อยลง ฉันรักฉันบ้าง แต่สวรรค์ที่ดีก็มีปัญหา UI อยู่บ้าง ..
Ross Rogers

ฉันใช้เสรีภาพในการลบย่อหน้า "แก้ไข" ที่เพิ่มเข้ามาในคำถามเดิมซึ่งทำให้ดูเหมือนว่าขั้นตอนนี้น่าสงสัย ฉันไม่คิดว่ามันน่าจะเป็นความคิดเห็นแทนการแก้ไขคำถามอยู่ดี
สิงหาคม Lilleaas

75

สิ่งที่คุณอาจต้องทำคือก่อนอื่นให้ทำการโคลนพื้นที่เก็บข้อมูลบนเครื่องของคุณ

git clone --bare /path/to/repo /path/to/bare/repo.git  # don't forget the .git!

ตอนนี้เก็บถาวรไดเรกทอรี repo.git ใหม่โดยใช้ tar / gzip หรือเครื่องมือเก็บถาวรที่คุณชื่นชอบจากนั้นคัดลอกไฟล์เก็บถาวรไปยังเซิร์ฟเวอร์

ยกเลิกการเก็บ repo บนเซิร์ฟเวอร์ของคุณ จากนั้นคุณจะต้องตั้งค่ารีโมตบนที่เก็บในเครื่องของคุณ:

git remote add repo-name user@host:/path/to/repo.git #this assumes you're using SSH

จากนั้นคุณจะสามารถผลักและดึงจาก repo ระยะไกลด้วย:

git push repo-name branch-name
git pull repo-name branch-name

4
ช่วยอธิบายความคิดเห็น "อย่าลืม. git!" ได้ไหม จุดไหนในการเพิ่ม. git ที่ท้ายโฟลเดอร์? ควรทำเมื่อใด อนุสัญญาเท่านั้น?
lumbric

5
".git" เป็นเพียงมาตรฐานที่ไม่เป็นทางการในการระบุ repo git แบบเปลือย
Grant Limberg

3
ฉันไม่ได้ทำตามความคิดนี้ ... สิ่งนี้ไม่ผิดวัตถุประสงค์ทั้งหมดของการตั้งค่าเซิร์ฟเวอร์ git และใช้เพื่อ "ถ่ายโอน / คัดลอก / เก็บข้อมูลในการซิงค์ / สำรองข้อมูล" แทนการบีบอัดและใช้วิธีอื่นหรือไม่?
cregox

1
นี่คือสิ่งที่ฉันต้องการอย่างแท้จริงเนื่องจาก repo ดั้งเดิมอยู่ในเครือข่ายที่ไม่สามารถเข้าถึงเครือข่ายที่มีเซิร์ฟเวอร์ที่ฉันต้องการส่งไปได้ สิ่งนี้ทำให้ฉันสามารถใส่ repo ลงในช่องที่มีสิทธิ์เข้าถึง
michaeltwofish

3
@Cawas คุณต้อง zip / คัดลอก / แยก repo ด้วยตนเองเพียงครั้งเดียว หลังจากนั้นสิ่งที่คุณต้องมีคือกดและดึงคอมไพล์
Sparebytes

9

มีหลายวิธีในการย้ายที่เก็บไปรอบ ๆgit bundleเป็นวิธีที่ดีหากคุณมีเครือข่ายไม่เพียงพอ เนื่องจากที่เก็บ Git เป็นเพียงไดเร็กทอรีที่เต็มไปด้วยไฟล์คุณจึงสามารถ "โคลน" ที่เก็บได้โดยการทำสำเนาของ.gitไดเร็กทอรีด้วยวิธีใดก็ได้ที่เหมาะกับคุณที่สุด

วิธีที่มีประสิทธิภาพมากที่สุดคือการใช้พื้นที่เก็บข้อมูลภายนอกที่ใดที่หนึ่ง (ใช้GitHubหรือชุดขึ้นGitosis ) git pushแล้ว


7
remote server> cd /home/ec2-user
remote server> git init --bare --shared  test
add ssh pub key to remote server
local> git remote add aws ssh://ec2-user@<hostorip>:/home/ec2-user/dev/test
local> git push aws master

ฉันชอบความเรียบง่ายของคำตอบของคุณ แต่ฉันไม่แน่ใจว่าเป็นสิ่งที่ฉันต้องการหรือไม่ ฉันมี GIT repo อยู่แล้วบน GitHub และตอนนี้ต้องการพุชไปยังไฟล์สดเซิร์ฟเวอร์ Ubuntu ของเรา (ซึ่งติดตั้ง GIT แล้ว) คุณสามารถเพิ่มความคิดเห็นเพื่อให้กระบวนการชัดเจนขึ้นได้หรือไม่?
Dave Everitt

1

คุณสามารถผลักดันสาขาไปยังเซิร์ฟเวอร์ระยะไกลพูดGitHub ก่อนอื่นคุณต้องทำการตั้งค่าโครงการเบื้องต้นจากนั้นโคลนโครงการของคุณและ:

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