2009-06-10 11 views
76

Tôi có một kho lưu trữ bản sao làm việc mà tôi đã làm việc không có vấn đề gì; nguồn gốc của kho lưu trữ này là trên GitHub.Làm cách nào để tôi có thể tạo kho lưu trữ cục bộ của mình cho git-pull?

Tôi muốn làm kho lưu trữ bản sao làm việc của mình có sẵn như là nguồn gốc cho máy xây dựng của tôi (máy ảo trên máy chủ vật lý khác), để cam kết tôi thực hiện với bản sao làm việc của mình có thể được xây dựng và thử nghiệm trên máy xây dựng phải đi qua GitHub trước. Tôi đã có một bản dựng cho kho lưu trữ GitHub, nhưng tôi muốn đây là kho/xây dựng "vàng"; tức là, nếu có điều gì đó xảy ra, việc xây dựng chống lại GitHub phải được đảm bảo để vượt qua.

Tôi đã xem tài liệu về URL Git và thấy rằng có tùy chọn sử dụng URL trong biểu mẫu git://host.xz[:port]/path/to/repo.git/ (xem, ví dụ: git-clone documentation). Tôi muốn làm điều này theo cách đơn giản nhất có thể, với cấu hình tối thiểu: Tôi không muốn phải thiết lập một SSH daemon hoặc máy chủ web chỉ để xuất bản nó lên máy xây dựng của tôi.

Tôi đang chạy Windows 7 x64 RC, tôi đã cài đặt MSysGit và TortoiseGit và tôi đã mở cổng mặc định của Git (9814) trên tường lửa. Vui lòng giả sử bản sao làm việc tại repo là D:\Visual Studio Projects\MyGitRepo và tên máy chủ là devbox. Máy xây dựng là Windows Server 2008 x64. Tôi đã thử lệnh sau trên máy xây dựng, với đầu ra được liên kết:

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) 

Tôi có thiếu gì đó không?

+0

Bạn không thể chỉ thiết lập chia sẻ cục bộ và sau đó thực hiện 'git clone \\ workmachine \ share' từ máy chủ của bạn? Không phải là cách tốt nhất/hiệu quả nhất, nhưng điều đơn giản nhất để làm. –

Trả lời

111

Năm khả năng tồn tại để thiết lập một kho lưu trữ cho kéo từ:

  • hệ thống tập tin địa phương: git clone /path/to/repo hoặc git clone file://path/to/repo. Ít nhất làm việc nếu bạn có hệ thống tập tin mạng, nhưng không sử dụng mạng rất hiệu quả. (Đây gần như là giải pháp được đề xuất bởi Joakim Elofsson)
  • Giao thức HTTP: git clone http://example.com/repo. Bạn cần bất kỳ máy chủ web nào và bạn cũng cần chạy (có thể tự động, từ móc) git-update-server-info để tạo thông tin bắt buộc để tìm nạp/kéo thông qua giao thức "câm".
  • SSH: git clone ssh://example.com/srv/git/repo hoặc git clone example.com:/srv/git/repo. Bạn cần cài đặt SSH server (SSH daemon) và cài đặt SSH trên máy khách (ví dụ: PuTTY trên MS Windows).
  • giao thức git: git clone git://example.com/repo. Bạn cần chạy git-daemon trên máy chủ; xem tài liệu để biết chi tiết (bạn có thể chạy nó dưới dạng quá trình độc lập chỉ để tìm nạp, không cần thiết khi chạy dịch vụ). git-daemon là một phần của git.
  • bundle: Bạn tạo gói trên máy chủ bằng cách sử dụng lệnh git-bundle, chuyển nó sang máy khách theo bất kỳ cách nào (thậm chí qua USB) và sao chép bằng git clone file.bndl (nếu bản sao không hoạt động, bạn có thể thực hiện "git init", "git remote add" và "git fetch").

Điều bạn đang thiếu trong ví dụ có thể đang chạy git-daemon trên máy chủ. Điều đó, hoặc định cấu hình sai git-daemon.

Rất tiếc, tôi không thể giúp bạn chạy git-daemon như dịch vụ trên MS Windows. Không có gì trong thông báo cho phiên bản cuối cùng của msysGit về git-daemon không hoạt động, mặc dù.

+0

Ok, vì vậy tôi cần phải cài đặt * một cái gì đó * hoặc sao chép nó trên một bó bằng tay mỗi lần (có thể kịch bản nó thông qua, tôi đoán. Do ba tùy chọn đầu tiên cần git-daemon là tốt? – alastairs

+1

Chỉ có "git giao thức" tùy chọn cần chạy git-daemon trên máy chủ Chỉ có các tùy chọn "SSH" và "HTTP" mới yêu cầu các công cụ bổ sung: sshd (máy chủ ssh) hoặc máy chủ web.Giải pháp bó là giải pháp thủ công. –

+0

Mặc dù câu hỏi đã được về 'kéo', áp phích phải được cảnh báo từ chạy 'git push' sau đó, như kho lưu trữ mà ông đang nhân bản từ là không trần. – yhager

15

Ngoài câu trả lời của Jakub Narębski, có một cách khác, phù hợp hơn với câu hỏi ban đầu của bạn. Bạn có thể sao chép từ github như bạn thường làm, sau đó khi bạn muốn thực hiện một kéo một lần từ repo địa phương của bạn, chỉ cần làm điều này:

git pull /path/to/repo master 

(thay vì tổng thể bạn có thể đặt bất kỳ tên chi nhánh.)

1

Tuyến đường ssh hoạt động tốt nhưng yêu cầu máy chủ ssh từ xa. Nếu bạn có nền tảng Windows thì Cygwin cung cấp một máy chủ ssh hoạt động với Git, nhưng nâng cấp bằng tay Git nếu sử dụng Cygwin Git (tôi đã viết một số gợi ý tại http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin/).

1

Gần đây tôi đã thay đổi một trong các dự án git của mình để sao chép chính nó vào máy chủ HTTP bằng cách sử dụng sitecopy để thực hiện tải lên tệp thực tế.

Thật dễ dàng, chỉ cần sử dụng git update-server-info rồi sao chép thư mục .git vào một số thư mục có thể truy cập http trên máy chủ của bạn. Tôi đã sử dụng 'project.git', điều này khá phổ biến.

Git kéo từ http://site/project-git hoạt động như một nhà vô địch và tôi không phải có bất kỳ thứ gì trên máy chủ ngoại trừ truy cập FTP, mặc dù sitecopy cũng hỗ trợ webdav.

Tôi không khuyên bạn nên sử dụng sitecopy, tuy nhiên, vì nó không giữ cho nhiều máy đồng bộ tốt. Đối với dự án của tôi, kho lưu trữ HTTP là chỉ đọc, và cập nhật vàng đến từ chỉ một máy, do đó, nó hoạt động tốt đủ.

0

Nếu máy chủ từ xa của bạn là trong mạng lưới các cửa sổ cùng, tức là bạn có thể truy cập vào nó như \ remotehost, sau đó bạn có thể ánh xạ ổ đĩa mạng trong thám hiểm, chúng ta hãy nói z: -> \ remotehost \ repodir, sau đó bạn có thể sử dụng 'git clone/z/myproject' sao chép dự án

1

Nếu bạn có một con đường như

C:\Project\ 

và bạn đã làm git init đã có, vì vậy bạn cũng có một thư mục

C:\Project\.git\ 

Bây giờ bạn tạo một thư mục mới

C:\.git\ 

Đi vào thư mục đó và chạy git clone --bare ..\Project (trần là quan trọng),
quay trở lại thư mục C:\Project\ của bạn và làm một git remote add-url local ..\.git\Project.
Bây giờ bạn chỉ cần thực hiện git add -A, git commit -m "HelloWorld"git push local master.

Bạn có thể chia sẻ các thư mục Project, kết nối nó với Z: và làm git clone Z:\Project - bạn có thể sử dụng tại git pull origin mastergit push origin master để đẩy/kéo thay đổi từ máy này sang máy khác.