ฉันจะทำให้ที่เก็บในเครื่องของฉันพร้อมใช้งานสำหรับ git-pull ได้อย่างไร


89

ฉันมีที่เก็บสำเนาที่ใช้งานได้ซึ่งฉันใช้งานได้โดยไม่มีปัญหา ต้นกำเนิดของที่เก็บนี้อยู่บน GitHub

ฉันต้องการให้ที่เก็บสำเนาที่ใช้งานได้เป็นจุดเริ่มต้นสำหรับเครื่องสร้างของฉัน (VM บนโฮสต์ทางกายภาพอื่น) เพื่อที่ฉันจะสร้างและทดสอบสำเนาการทำงานของฉันบนเครื่องสร้างโดยไม่ต้องผ่าน GitHub ก่อน ฉันมีบิวด์สำหรับที่เก็บ GitHub อยู่แล้ว แต่ฉันอยากให้นี่เป็นที่เก็บ / บิลด์ "ทอง" กล่าวคือหากมีบางสิ่งเกิดขึ้นที่นั่นการสร้างที่ต่อต้าน GitHub ควรได้รับการรับรองว่าจะผ่าน

ฉันได้ดูเอกสารเกี่ยวกับ Git URL และพบว่ามีตัวเลือกในการใช้ URL ในรูปแบบgit://host.xz[:port]/path/to/repo.git/(ดูเช่นเอกสาร git-clone ) ฉันต้องการทำสิ่งนี้ด้วยวิธีที่ง่ายที่สุดโดยมีการกำหนดค่าขั้นต่ำ: ฉันไม่ต้องการที่จะต้องตั้งค่า SSH daemon หรือเว็บเซิร์ฟเวอร์เพียงเพื่อเผยแพร่สิ่งนี้ไปยังเครื่องบิลด์ของฉัน

ฉันใช้ Windows 7 x64 RC ฉันติดตั้ง MSysGit และ TortoiseGit แล้วและฉันได้เปิดพอร์ตเริ่มต้นของ Git (9814) บนไฟร์วอลล์ กรุณาถือว่าทำงานสำเนา repo ที่และชื่อโฮสต์คือD:\Visual Studio Projects\MyGitRepo devboxเครื่องสร้างคือ Windows Server 2008 x64 ฉันได้ลองใช้คำสั่งต่อไปนี้บนเครื่องบิลด์พร้อมเอาต์พุตที่เกี่ยวข้อง:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

ฉันพลาดอะไรไปรึเปล่า?


คุณไม่สามารถตั้งค่าการแชร์ในเครื่องแล้วทำการ 'git clone \\ workmachine \ share' จาก buildmachine ของคุณได้หรือไม่? ไม่ใช่วิธีที่ดีที่สุด / ได้ผลที่สุด แต่เป็นวิธีที่ง่ายที่สุด
Joakim Elofsson

คำตอบ:


135

มีความเป็นไปได้ห้าประการในการตั้งค่าที่เก็บสำหรับดึงจาก:

  • ระบบไฟล์ในเครื่อง : git clone /path/to/repoหรือgit clone file://path/to/repo. ทำงานน้อยที่สุดหากคุณมีระบบไฟล์เครือข่าย แต่ใช้เครือข่ายได้ไม่เต็มประสิทธิภาพ (นี่เป็นวิธีแก้ปัญหาที่เสนอโดยJoakim Elofsson )
  • HTTP โปรโตคอลgit clone http://example.com/repo : คุณต้องการเว็บเซิร์ฟเวอร์ใด ๆและคุณต้องเรียกใช้ (โดยอัตโนมัติจาก hook) git-update-server-infoเพื่อสร้างข้อมูลที่จำเป็นสำหรับการดึง / ดึงผ่านโปรโตคอล "โง่"
  • SSH : git clone ssh://example.com/srv/git/repoหรือgit clone example.com:/srv/git/repo. คุณต้องติดตั้งเซิร์ฟเวอร์ SSH (SSH daemon) และติดตั้ง SSH บนไคลเอนต์ (เช่น PuTTY บน MS Windows)
  • git โปรโตคอล : git clone git://example.com/repo. คุณต้องรันgit-daemonบนเซิร์ฟเวอร์ ดูเอกสารประกอบสำหรับรายละเอียด (คุณสามารถเรียกใช้เป็นกระบวนการแบบสแตนด์อโลนสำหรับการดึงข้อมูลเท่านั้นไม่จำเป็นต้องเรียกใช้เป็นบริการ) git-daemon เป็นส่วนหนึ่งของ git
  • บันเดิล : คุณสร้างบันเดิลบนเซิร์ฟเวอร์โดยใช้คำสั่งgit-bundleโอนไปยังเครื่องไคลเอนต์ไม่ว่าจะด้วยวิธีใดก็ตาม (แม้จะผ่าน USB) และโคลนโดยใช้git clone file.bndl(หากโคลนไม่ทำงานคุณสามารถทำ "git init", "git remote add "และ" git fetch ")

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

น่าเสียดายที่ฉันไม่สามารถช่วยคุณในการเรียกใช้ git-daemon เป็นบริการบน MS Windows ได้ ไม่มีสิ่งใดในการประกาศสำหรับ msysGit เวอร์ชันล่าสุดเกี่ยวกับ git-daemon ที่ไม่ทำงาน


ตกลงดังนั้นฉันต้องติดตั้งบางอย่างหรือคัดลอกลงในบันเดิลด้วยตนเองทุกครั้ง (อาจจะเขียนสคริปต์ผ่านฉันเดาว่าสามตัวเลือกแรกจำเป็นต้องมี git-daemon ด้วยหรือไม่
alastairs

1
เฉพาะอ็อพชัน "git protocol" เท่านั้นที่ต้องการรัน git-daemon บนเซิร์ฟเวอร์ เฉพาะตัวเลือก "SSH" และ "HTTP" เท่านั้นที่ต้องใช้เครื่องมือพิเศษ: sshd (เซิร์ฟเวอร์ ssh) หรือเว็บเซิร์ฟเวอร์ โซลูชันบันเดิลเป็นโซลูชันแบบแมนนวล
Jakub Narębski

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

ช่วยอธิบายให้ละเอียดได้ไหม @yhager?
alastairs

1
หมายเหตุสำหรับใครก็ตามที่ลองใช้ตัวเลือกระบบไฟล์ภายใน: อย่าลืมหลีกเลี่ยงเครื่องหมายแบ็กสแลชที่นำหน้าบนเส้นทาง UNC! :-)
alastairs

17

นอกจากคำตอบของ Jakub Narębskiแล้วยังมีอีกวิธีหนึ่งที่สอดคล้องกับคำถามเดิมของคุณ คุณสามารถโคลนจาก github ได้เหมือนที่คุณทำปกติจากนั้นเมื่อคุณต้องการดึงข้อมูลครั้งเดียวจาก repo ในพื้นที่ของคุณให้ทำสิ่งนี้:

git pull /path/to/repo master

(แทนที่จะเป็น master คุณสามารถใส่ชื่อสาขาใดก็ได้)


เคล็ดลับเล็ก ๆ น้อย ๆ (หรือฉันจะตอบคำถามนี้ได้อย่างไร): ..ใน <path / to / repo> ไม่ได้ผล ใช้เส้นทางแบบเต็มแทน
Dmitry Timofeev

1

เส้นทาง ssh ทำงานได้ดี แต่ต้องใช้เซิร์ฟเวอร์ ssh ระยะไกล หากคุณมีแพลตฟอร์ม Windows Cygwin จะมีเซิร์ฟเวอร์ ssh ที่ใช้งานได้ซึ่งทำงานร่วมกับ Git แต่อัปเกรด Git ด้วยตนเองหากใช้ Cygwin Git (ฉันเขียนคำแนะนำบางอย่างไว้ที่http://alecthegeek.wordpress.com/2009/01/21/top-tip -upgrade-git-on-cygwin / )


1

ฉันเพิ่งเปลี่ยนโปรเจ็กต์ git ของฉันให้จำลองตัวเองไปยังเซิร์ฟเวอร์ HTTP โดยใช้ sitecopy เพื่ออัปโหลดไฟล์จริง

มันค่อนข้างง่ายเพียงแค่ใช้git update-server-infoแล้วมิเรอร์ไดเร็กทอรี. git ไปยังไดเร็กทอรีที่เข้าถึงได้ http บนเซิร์ฟเวอร์ของคุณ ฉันใช้ 'project.git' ซึ่งเป็นเรื่องธรรมดา

Git ดึงจากhttp: // site / project-gitทำงานเหมือนแชมป์และฉันไม่จำเป็นต้องมีอะไรบนเซิร์ฟเวอร์ยกเว้นการเข้าถึง FTP แม้ว่า sitecopy จะรองรับ webdav ด้วย

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


1

หากคุณมีเส้นทางเช่น

C:\Project\

และคุณได้git initดำเนินการแล้วคุณจึงมีโฟลเดอร์ด้วย

C:\Project\.git\

ตอนนี้คุณสร้างโฟลเดอร์ใหม่

C:\.git\

ไปลงในโฟลเดอร์และวิ่งgit clone --bare ..\Project( เปลือยเป็นสิ่งสำคัญ)
กลับไปที่โฟลเดอร์และทำC:\Project\ ตอนนี้คุณก็ทำ, และgit remote add-url local ..\.git\Project
git add -Agit commit -m "HelloWorld"git push local master

คุณสามารถแชร์Projectโฟลเดอร์เชื่อมต่อZ:และทำgit clone Z:\Project- คุณสามารถใช้ตอนนี้git pull origin masterและgit push origin masterเพื่อผลัก / ดึงการเปลี่ยนแปลงจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง


0

หากโฮสต์ระยะไกลของคุณอยู่ในเครือข่าย windows เดียวกันกล่าวคือคุณสามารถเข้าถึงเป็น \ remotehost จากนั้นคุณสามารถแมปไดรฟ์เครือข่ายใน explorer สมมติว่า z: -> \ remotehost \ repodir หลังจากนั้นคุณสามารถใช้ 'git clone / z / myproject 'เพื่อโคลนโปรเจ็กต์

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