Làm cách nào tôi có thể cung cấp kho lưu trữ cục bộ của mình cho git-pull?


89

Tôi có một kho lưu trữ bản sao đang hoạt động mà tôi đang 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.

Tôi muốn cung cấp kho lưu trữ bản sao làm việc của mình làm nguồn gốc cho máy xây dựng của tôi (máy ảo trên một máy chủ vật lý khác), để những cam kết mà tôi thực hiện đối 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 mà không cần phải thông qua GitHub đầu tiên. Tôi đã có một bản dựng cho kho lưu trữ GitHub, nhưng tôi muốn đây là một bản dựng / kho lưu trữ "vàng"; tức là, nếu có điều gì đó xảy ra ở đó, bản dựng chống lại GitHub phải được đảm bảo sẽ 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/(ví dụ: xem tài liệu git-clone ). Tôi muốn thực hiện việc 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 trình nền hoặc máy chủ web SSH chỉ để xuất bản nó lên máy xây dựng của mình.

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. Hãy giả sử rằng repo bản sao đang hoạt động là tại 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)

Tui bỏ lỡ điều gì vậy?


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

Câu trả lời:


133

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

  • hệ thống tệp cục bộ : git clone /path/to/repohoặc git clone file://path/to/repo. Công việc kém nhất nếu bạn có hệ thống tệp được nối mạng, nhưng việc sử dụng mạng không hiệu quả. (Đây gần như là giải pháp chính xác do Joakim Elofsson đề xuất )
  • Các 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ột hook) git-update-server-info để tạo thông tin cần thiết cho việc tìm nạp / kéo thông qua các giao thức "câm".
  • SSH : git clone ssh://example.com/srv/git/repohoặc git clone example.com:/srv/git/repo. Bạn cần thiết lập máy chủ SSH (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ó như một quy trình độc lập chỉ để tìm nạp, không cần thiết chạy dưới dạng dịch vụ). git-daemon là một phần của git.
  • : Bạn tạo gói trên máy chủ bằng lệnh git-pack , chuyển nó sang máy khách theo bất kỳ cách nào (ngay cả qua USB) và sao chép bằng cách sử dụ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 ").

Những gì bạn đang thiếu trong ví dụ của mình có thể là 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 dưới dạng dịch vụ trên MS Windows. Tuy nhiên, không có thông báo nào cho phiên bản mới nhất của msysGit về việc git-daemon không hoạt động.


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

1
Chỉ tùy chọn "giao thức git" mới cần chạy git-daemon trên máy chủ. Chỉ 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.
Jakub Narębski

Mặc dù câu hỏi là về 'pull', người đăng phải được cảnh báo không chạy 'git push' sau đó, vì kho lưu trữ mà anh ấy đang nhân bản là không có.
yhager

Bạn có thể giải thích thêm về điều này không, @yhager?
alastairs

1
Lưu ý cho bất kỳ ai khác đang thử tùy chọn hệ thống tệp cục bộ: hãy nhớ thoát khỏi dấu gạch chéo ngược hàng đầu trên đường dẫn UNC! :-)
alastairs

17

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 lần kéo từ repo cục bộ của mình, chỉ cần làm như sau:

git pull /path/to/repo master

(thay vì master, bạn có thể đặt bất kỳ tên nhánh nào.)


Một mẹo nhỏ (hoặc làm thế nào tôi có câu hỏi này): ..trong <path / to / repo> dường như không hoạt động; sử dụng một đường dẫn đầy đủ để thay thế.
Dmitry Timofeev


1

Gần đây, tôi đã thay đổi một trong các dự án git của mình để tự sao chép sang 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ế.

Nó khá dễ dàng, chỉ cần sử dụng git update-server-infosau đó 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 pull từ http: // site / project-git hoạt động như một nhà vô địch và tôi không cần phải có bất kỳ thứ gì trên máy chủ ngoại trừ quyền truy cập FTP, mặc dù sitecopy cũng hỗ trợ webdav.

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


1

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

C:\Project\

và bạn đã làm git init, 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\

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

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


0

Nếu máy chủ từ xa của bạn nằm trong cùng một mạng windows, tức là bạn có thể truy cập nó bằng \ remotehost, thì bạn có thể ánh xạ ổ đĩa mạng trong explorer, giả sử z: -> \ remotehost \ repodir, sau đó bạn có thể sử dụng 'git clone / z / myproject 'để sao chép dự án

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.