Lưu trữ Kho lưu trữ Git trong Windows


108

Hiện tại có cách nào để lưu trữ kho lưu trữ Git được chia sẻ trong Windows không? Tôi hiểu rằng bạn có thể định cấu hình dịch vụ Git trong Linux với:

git daemon

Có tùy chọn Windows gốc, thiếu các thư mục chia sẻ, để lưu trữ dịch vụ Git không?

CHỈNH SỬA: Tôi hiện đang sử dụng cài đặt cygwin của git để lưu trữ và làm việc với kho lưu trữ git trong Windows, nhưng tôi muốn thực hiện bước tiếp theo là lưu trữ kho lưu trữ với một dịch vụ có thể cung cấp quyền truy cập cho người khác.


35
Chủ nhân hiện tại của tôi không có bất kỳ máy Unix hoặc Linux nào ... việc đưa nhà cung cấp Kiểm soát nguồn và hệ điều hành mới vào cùng một lúc có thể hơi ... đau thương.
Jeff Fritz

1
Có gì sai với git-daemon? AFAIK nó hoạt động tốt trên Windows.
Aristotle Pagaltzis 24/10/08

10
Cài đặt Git bằng trình cài đặt msysgit tiêu chuẩn cho Windows dường như không cài đặt được git daemon. : \
Tim Visher

1
Có một trình cài đặt CopSSH và msysgit đi kèm mà bạn có thể muốn xem. Nó sử dụng xác thực khóa công khai và làm cho nó dễ dàng. Tuyên bố từ chối trách nhiệm: Tôi là quản trị viên web - Tôi bắt đầu dự án sau khi đọc hướng dẫn của Tim Davis về cách thiết lập máy chủ git an toàn.
Sông Lilith

3
Đối với hồ sơ: Git cho Windows đã bao gồm một phiên bản làm việc của git daemon kể từ phiên bản 1.7.4 (phát hành tháng 2 năm 2011). Vì vậy cygwin không còn cần thiết nữa. Xem thêm stackoverflow.com/q/5186070/291641
patthoyts

Câu trả lời:


75

Dưới đây là một số bước bạn có thể làm theo để chạy daemon git trong Windows:

(Điều kiện tiên quyết: Cài đặt Cygwin mặc định và ứng dụng khách git hỗ trợ git daemon)

Bước 1 : Mở bash shell

Bước 2 : Trong thư mục / cygdrive / c / cygwin64 / usr / local / bin /, tạo một file có tên "gitd" với nội dung như sau:

#!/bin/bash

/usr/bin/git daemon --reuseaddr --base-path=/git --export-all --verbose --enable=receive-pack

Bước 3 : Chạy lệnh cygrunsrv sau từ lời nhắc nâng cao (tức là với tư cách quản trị viên) để cài đặt tập lệnh dưới dạng dịch vụ (Lưu ý: giả sử Cygwin được cài đặt tại C: \ cygwin64):

cygrunsrv   --install gitd                          \
            --path c:/cygwin64/bin/bash.exe         \
            --args c:/cygwin64/usr/local/bin/gitd   \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Bước 4 : Chạy lệnh sau để bắt đầu dịch vụ:

cygrunsrv --start gitd

Bạn xong việc rồi. Nếu bạn muốn kiểm tra nó, đây là một tập lệnh nhanh và bẩn cho thấy rằng bạn có thể đẩy qua giao thức git vào máy cục bộ của mình:

#!/bin/bash

echo "Creating main git repo ..."
mkdir -p /git/testapp.git
cd /git/testapp.git
git init --bare
touch git-daemon-export-ok
echo "Creating local repo ..."
cd
mkdir testapp
cd testapp
git init
echo "Creating test file ..."
touch testfile
git add -A
git commit -m 'Test message'
echo "Pushing master to main repo ..."
git push git://localhost/testapp.git master

2
Nếu tôi có thể chỉnh sửa bài đăng này, tôi sẽ thêm những điều sau: Điều kiện tiên quyết: cygwin với các gói git và cygrunsrv được cài đặt.
Mario

2
Một lưu ý khác: đủ điều kiện đường dẫn đến git bên trong tập lệnh shell gitd. Trên một trong các máy của tôi, MSYSGit đã được khởi động thay vì cygwin-git khi thực thi dưới dạng quy trình cửa sổ. MSYSGit không hỗ trợ chế độ daemon nên dịch vụ không khởi động được.
Mario

26
Tôi chưa bao giờ coi các giải pháp Cygwin là "hoạt động trong Windows". Nó giống như nói "đang chạy linux trong máy ảo đang hoạt động trong Windows". Nhưng đó chỉ là ý kiến ​​trừng phạt của tôi;)
Rook

3
ghi chú nhanh: / usr / bin không hoạt động đối với tôi nhưng việc đặt vào / bin hoạt động (và sử dụng c: / cygwin / bin / gitd trong cygrunsrv). Không chắc bản cài đặt cygwin của tôi bao nhiêu tuổi nhưng có vẻ như / usr / bin là một liên kết đến những gì trong / bin mà cửa sổ không biết về ... Cũng khá rõ ràng, nhưng hãy nhớ tạo thư mục / git trong c: / cygwin /
armyofda12mnkeys

3
@Rook - Ngược lại, bộ công cụ Cygwin không khác bất kỳ ứng dụng bên thứ 3 nào mà bạn có thể cài đặt. Cygwin không phải là một máy ảo mà là một bộ công cụ được đóng gói sẵn. Nó chỉ là một tập hợp các tệp thực thi và dlls Windows giống như mọi thứ khác trên máy của bạn.
Derek Greer

16

GitStack có thể là lựa chọn tốt nhất của bạn. Nó hiện đang miễn phí (cho tối đa 2 người dùng) và là mã nguồn mở tại thời điểm viết bài.


2
Có vẻ như điều đó đã bị hạn chế đối với các dự án nguồn mở hoặc dành cho sinh viên: "GitStack miễn phí cho các dự án nguồn mở và sinh viên!"
ccellar

12

Đây là máy chủ git chuyên dụng cho windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Trạng thái của máy chủ Bonobo là gì? Nó có đầy đủ chức năng không? Tôi không thể nói từ các tài liệu, nhưng nó trông rất hấp dẫn.
Jeff Fritz

1
@JeffFritz: vừa mới ngừng sử dụng. Điều đáng tiếc là không cập nhật trạng thái kho lưu trữ ( git update-server-info) sau khi đẩy HTTP và logic này không được thực hiện bởi thư viện Git (GitSharp) của họ. Tôi nghi ngờ nó sẽ sớm đạt đến trạng thái hoạt động thực sự.
André Caron,

Ngoài ra, không làm việc với TeamCity (đó là lý do chính cho tôi không sử dụng nó) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg

3
Chúc mừng người dùng Bonobo ở đây. Tôi tin rằng mối quan tâm của cả Andre và Piers nên được giải quyết ngay bây giờ. Vấn đề TeamCity đó đã được đánh dấu là đã đóng và tôi chưa gặp bất kỳ sự cố nào khi sử dụng kho lưu trữ tập trung.
Quinn Bailey

9

Nếu bạn đang làm việc trong môi trường Windows, bạn đã cân nhắc đến Mercurial chưa? Nó là một hệ thống kiểm soát phiên bản phân tán giống như Git, nhưng tích hợp gọn gàng và dễ dàng hơn nhiều với Windows.


9
Đúng là sử dụng Mercurial trên máy Windows dễ dàng hơn nhiều, ít nhất là về khả năng đồng bộ hóa các kho lưu trữ. Không phải là một câu trả lời cực kỳ hữu ích nếu bạn thực sự phải sử dụng Git!
Frank Shearar

Ngoài ra Bazaar hoạt động nguyên bản trên các cửa sổ; nó thậm chí còn có hỗ trợ thương mại.
băm

7

Cài đặt CygWin là một việc làm quá mức cần thiết, hãy đọc hướng dẫn này để biết cách thực hiện nhanh hơn và có nguồn gốc:

http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP


Tôi đã đến bữa tiệc muộn, nhưng liên kết này hiện chuyển hướng đến rùagit.org , nơi nói về khách hàng. Tôi không thể tìm thấy bất cứ điều gì về việc chạy một máy chủ ở đó.
Richard A

7

Nếu bạn gặp lỗi cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.sau khi chạy lệnh:

cygrunsrv --start gitd

điều đó có nghĩa là bạn đã không tạo thư mục 'đường dẫn cơ sở'.

Tạo thư mục '/ git' và chạy lại lệnh sẽ khắc phục điều này.


Bạn cũng có thể gặp lỗi này nếu /gitquyền NTFS của bạn không cho phép truy cập đọc / ghi tài khoản dịch vụ (SYSTEM).
spoulson

5

Tôi hiện đang sử dụng trình nền ssh của cygwin trên Windows để phục vụ và cho phép truy cập từ xa vào kho của tôi. Nó hoạt động khá tốt, tôi có toàn quyền kiểm soát những ai truy cập repo của tôi bằng chứng chỉ ssh của họ và hiệu suất hoạt động rực rỡ, thậm chí qua các liên kết WAN và VPN từ xa.

Một giải pháp khác là sử dụng Gitosis . Nó là một công cụ giúp lưu trữ repo dễ dàng hơn nhiều.


Làm thế nào bạn có được daemon git hoạt động với cygwin? Tôi đã thiết lập daemon ssh và tôi đã thử đăng nhập vào máy tính của mình qua ssh nhưng bất cứ khi nào tôi cố gắng chạy daemon git thì nó chỉ bị treo.
Thiru

Làm sao bạn có được gitosis làm việc trên cửa sổ là có một lỗi: github.com/res0nat0r/gitosis/issues#issue/1
dalore

4

Bạn không cần phải lưu trữ một dịch vụ, bạn cũng có thể tạo một kho lưu trữ dùng chung trên bộ nhớ dùng chung. Chỉ cần tạo một kho lưu trữ trống. Bạn có thể sao chép một repo hiện có thành một repo được chia sẻ bằng cách sử dụng: "git clone --bare --shared [source] [dest]". Bạn cũng có thể init một kho lưu trữ mới bằng cách sử dụng "git init --bare --shared = all".

Henk


3
Có, bạn có thể tạo kho lưu trữ dùng chung trên ổ đĩa, nhưng tôi sẽ KHÔNG thể truy cập kho lưu trữ đó trừ khi tôi ở trên cùng một mạng với kho lưu trữ. Mục đích của câu hỏi là để cho phép truy cập từ xa đến một kho lưu trữ cho một đồng nghiệp đang làm việc off-site
Jeff Fritz

3
Đây thực sự không phải là một giải pháp cho câu hỏi và có vẻ như là một điều khá đáng nghi vấn để làm.
Pat O


4

Hiện msysGit hỗ trợ git daemon! Nó hoạt động tốt (ít nhất là đối với tôi). Tôi sẽ cố gắng làm cho nó chạy như một dịch vụ ...


nó có hỗ trợ cả đẩy và kéo không? Vì có một mã sự cố.google.com/p/msysgit/issues/detail?id=457 khi thực hiện đẩy.
Vadim

Vì vậy, bạn đã có này chạy như một dịch vụ? Bạn có biết hướng dẫn "bắt đầu" không?
Craig McQueen


2

Trên Windows, bạn cũng có thể cung cấp các kho lưu trữ Git với Apache qua HTTP hoặc HTTPS, sử dụng tiện ích mở rộng DAV.

Đường dẫn kho lưu trữ Git sau đó có thể được bảo vệ bằng các kiểm tra xác thực Apache như hạn chế đối với một số địa chỉ IP nhất định hoặc xác thực kiểu htpasswd / htdigest.

Hạn chế của việc sử dụng xác thực htpasswd / htdigest là tên người dùng: mật khẩu được chuyển trong URL Git được yêu cầu, vì vậy hạn chế truy cập vào URL Git ở một số địa chỉ IP nhất định sẽ tốt hơn.

Chỉnh sửa: Lưu ý, bạn có thể để mật khẩu ra khỏi URL Git và Git sẽ nhắc bạn nhập mật khẩu khi đẩy và tìm nạp / kéo thay thế.

Sử dụng HTTPS có nghĩa là tất cả dữ liệu được mã hóa khi truyền.

Nó đủ dễ dàng để thiết lập và hoạt động.

Ví dụ sau cho thấy sự kết hợp của kiểm soát truy cập theo địa chỉ IP và người dùng: mật khẩu qua HTTP tiêu chuẩn.

Ví dụ về Apache Virtualhost

## GIT HTTP DAV ##
<VirtualHost *:80>

  ServerName git.example.com
  DocumentRoot C:\webroot\htdocs\restricted\git
  ErrorLog C:\webroot\apache\logs\error-git-webdav.log

    <Location />
      DAV on
      # Restrict Access
      AuthType Basic
      AuthName "Restricted Area"
      AuthUserFile "C:\webroot\apache\conf\git-htpasswd"
      # To valid user
      Require valid-user
      # AND valid IP address
      Order Deny,Allow
      Deny from all
      # Example IP 1
      Allow from 203.22.56.67 
      # Example IP 2
      Allow from 202.12.33.44 
      # Require both authentication checks to be satisfied
      Satisfy all
    </Location>

</VirtualHost>

Ví dụ .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = http://username:password@git.example.com/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

2

Tại nơi làm việc, tôi đang sử dụng GitBlit GO được cài đặt trên Windows Server. Hoạt động hoàn hảo và tích hợp tốt với ActiveDirectory để xác thực và ủy quyền người dùng. Nó cũng miễn phí và mã nguồn mở (được cấp phép Apache)

Trang chủ GitBlit

Chỉ hỗ trợ truy cập HTTP (S), không có SSH, nhưng trong Windows, bạn không cần thêm bất cứ thứ gì.


Họ có hỗ trợ SSL (HTTPS) dựa trên tài liệu thiết lập trên trang web.
Dandré

Có, HTTP và HTTPS được hỗ trợ (tôi chỉ sử dụng HTTPS) nhưng không có SSH. Đã cập nhật câu trả lời.
Gian Marco

2

Đây là câu trả lời năm 2015 cho một câu hỏi đã hơn 7 năm tuổi.

Với 10 đô la thanh toán một lần, từ https://bitbucket.org/product/server , người dùng có thể mua giấy phép Windows 64 bit cho tối đa 10 người dùng .

Rõ ràng các phiên bản 32-bit chỉ có sẵn thông qua kho lưu trữ của họ.

Bitbucket Server trước đây được gọi là Stash .

Xin lưu ý rằng tôi chưa thử phiên bản này nhưng $ 10 có vẻ như là một thỏa thuận tốt; ở đây tôi đọc rằng Atlassian tặng $ 10 cho tổ chức từ thiện. FWIW


0

Tôi nghĩ những gì Henk đang nói là bạn có thể tạo một kho lưu trữ dùng chung trên một ổ đĩa và sau đó sao chép nó vào một số vị trí chung mà cả hai bạn đều có quyền truy cập. Nếu có một số máy chủ của công ty hoặc thứ gì đó mà cả hai bạn đều có quyền truy cập ssh, bạn có thể đặt kho lưu trữ ở một nơi nào đó mà bạn có thể SCP nó trở lại máy tính của riêng bạn, và sau đó lấy từ đó. Tôi đã làm điều này cho riêng mình một thời gian ngắn, vì tôi có hai máy tính. Đó là một rắc rối, nhưng nó hoạt động.


2
"thiếu thư mục chia sẻ", cho biết câu hỏi ban đầu.
Các cuộc đua ánh sáng trong quỹ đạo

0

Đối với Windows 7 x64 và Cygwin 1.7.9, tôi cần sử dụng / usr / bin / gitd làm đối số args của cygrunsrv

cygrunsrv   --install gitd                          \
            --path c:/cygwin/bin/bash.exe           \
            --args /usr/bin/gitd                    \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Ngoài ra, tôi cần chạy bash với tư cách Quản trị viên để cài đặt dịch vụ.

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.