การโฮสต์ Git Repository ใน Windows


108

ปัจจุบันมีวิธีโฮสต์ที่เก็บ Git ที่ใช้ร่วมกันใน Windows หรือไม่? ฉันเข้าใจว่าคุณสามารถกำหนดค่าบริการ Git ใน Linux ด้วย:

git daemon

มีตัวเลือกดั้งเดิมของ Windows หรือไม่ก็คือการแชร์โฟลเดอร์สำหรับโฮสต์บริการ Git หรือไม่

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


35
นายจ้างปัจจุบันของฉันไม่มีเครื่อง Unix หรือ Linux ใด ๆ ... การนำผู้ให้บริการ Source Control และระบบปฏิบัติการใหม่เข้ามาในเวลาเดียวกันอาจเป็นเรื่องเล็กน้อย ...
Jeff Fritz

1
git-daemon มีอะไรผิดปกติ AFAIK ทำงานได้ดีบน Windows
Aristotle Pagaltzis

10
การติดตั้ง Git ใช้ติดตั้ง msysgit มาตรฐานสำหรับ Windows git daemonไม่ปรากฏในการติดตั้ง : \
Tim Visher

1
มีตัวติดตั้ง CopSSH และ msysgit ที่มาพร้อมกันซึ่งคุณอาจต้องการดู ใช้การรับรองความถูกต้องด้วยคีย์สาธารณะและทำให้ง่าย ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้ดูแลเว็บ - ฉันเริ่มโครงการหลังจากอ่านบทแนะนำของ Tim Davis เกี่ยวกับการตั้งค่าเซิร์ฟเวอร์ git ที่ปลอดภัย
Lilith River

3
สำหรับบันทึก: Git สำหรับ Windows ได้รวม git daemon เวอร์ชันที่ใช้งานได้ตั้งแต่เวอร์ชัน 1.7.4 (เผยแพร่เมื่อเดือนกุมภาพันธ์ 2554) ดังนั้นจึงไม่จำเป็นต้องใช้ cygwin อีกต่อไป ดูstackoverflow.com/q/5186070/291641
patthoyts

คำตอบ:


75

ต่อไปนี้เป็นขั้นตอนบางส่วนที่คุณสามารถทำตามเพื่อให้ git daemon ทำงานภายใต้ Windows:

(ข้อกำหนดเบื้องต้น: การติดตั้ง Cygwin ดีฟอลต์และไคลเอ็นต์ git ที่รองรับ git daemon)

ขั้นตอนที่ 1 : เปิด bash shell

ขั้นตอนที่ 2 : ในไดเร็กทอรี / cygdrive / c / cygwin64 / usr / local / bin / สร้างไฟล์ชื่อ "gitd" โดยมีเนื้อหาต่อไปนี้:

#!/bin/bash

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

ขั้นตอนที่ 3 : เรียกใช้คำสั่ง cygrunsrv ต่อไปนี้จากพร้อมต์ที่ยกระดับ (เช่นในฐานะผู้ดูแลระบบ) เพื่อติดตั้งสคริปต์เป็นบริการ (หมายเหตุ: สมมติว่ามีการติดตั้ง Cygwin ที่ C: \ cygwin64):

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

ขั้นตอนที่ 4 : เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มบริการ:

cygrunsrv - เริ่ม gitd

คุณทำเสร็จแล้ว หากคุณต้องการทดสอบนี่คือสคริปต์ที่รวดเร็วและสกปรกซึ่งแสดงให้เห็นว่าคุณสามารถส่งผ่าน git protocol ไปยังเครื่องของคุณได้:

#!/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
หากฉันสามารถแก้ไขโพสต์นี้ได้ฉันจะเพิ่มสิ่งต่อไปนี้: สิ่งที่ต้องมีก่อน: cygwin พร้อมกับแพ็คเกจ git และ cygrunsrv ที่ติดตั้ง
Mario

2
หมายเหตุอื่น: กำหนดพา ธ ไปยัง git ภายใน gitd เชลล์สคริปต์อย่างสมบูรณ์ ในเครื่องของฉัน MSYSGit เริ่มทำงานแทน cygwin-git เมื่อเรียกใช้งานเป็นกระบวนการ windows MSYSGit ไม่สนับสนุนโหมด daemon ดังนั้นบริการจึงไม่สามารถเริ่มทำงานได้
Mario

26
ฉันไม่เคยใช้โซลูชัน Cygwin ว่า "ทำงานใน Windows" ก็เหมือนกับการพูดว่า "การรัน linux ใน VM ทำงานใน Windows" แต่นั่นเป็นเพียงความคิดเห็นที่บริสุทธิ์ของฉันเท่านั้น)
Rook

3
หมายเหตุด่วน: / usr / bin ไม่ได้ผลสำหรับฉัน แต่การวางใน / bin ใช้งานได้ (และใช้ c: / cygwin / bin / gitd ใน cygrunsrv) ไม่แน่ใจว่าการติดตั้ง cygwin ของฉันเก่าแค่ไหน แต่ดูเหมือนว่า / usr / bin เป็นลิงก์ไปยัง whats in / bin ซึ่ง windows ไม่ทราบ ... ยังค่อนข้างชัดเจน แต่อย่าลืมสร้างโฟลเดอร์ / git ใน c: / cygwin /
armyofda12mnkeys

3
@Rook - ในทางกลับกันชุดเครื่องมือของ Cygwin ไม่แตกต่างจากแอปพลิเคชันของบุคคลที่สามอื่น ๆ ที่คุณอาจติดตั้ง Cygwin ไม่ใช่เครื่องเสมือน แต่เป็นชุดเครื่องมือที่บรรจุไว้ล่วงหน้า มันเป็นเพียงชุดปฏิบัติการและ dll ของ Windows เหมือนกับทุกสิ่งทุกอย่างในเครื่องของคุณ
Derek Greer

16

GitStackอาจเป็นทางเลือกที่ดีที่สุดของคุณ ปัจจุบันฟรี (สำหรับผู้ใช้สูงสุด 2 คน) และโอเพ่นซอร์สในขณะที่เขียน


2
ดูเหมือนว่าจะ จำกัด เฉพาะโครงการโอเพ่นซอร์สหรือโครงการของนักเรียน: "GitStack ให้บริการฟรีสำหรับโครงการโอเพ่นซอร์สและโครงการสำหรับนักเรียน!"
ccellar

12

นี่คือเซิร์ฟเวอร์ git เฉพาะสำหรับ windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


สถานะของเซิร์ฟเวอร์ Bonobo คืออะไร? ใช้งานได้เต็มที่หรือไม่ ฉันไม่สามารถบอกได้จากเอกสาร แต่มันดูน่าสนใจมาก
Jeff Fritz

1
@JeffFritz: เพิ่งเลิกใช้ สิ่งที่น่ารังเกียจไม่อัปเดตสถานะที่เก็บ ( git update-server-info) หลังจากการพุช HTTP และตรรกะนี้ไม่ได้ใช้โดยไลบรารี Git (GitSharp) ฉันสงสัยว่ามันจะถึงสถานะการทำงานจริงเร็ว ๆ นี้
André Caron

นอกจากนี้ยังใช้ไม่ได้กับ Teamcity (ซึ่งเป็นสาเหตุหลักที่ทำให้ฉันไม่ได้ใช้) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg

3
ผู้ใช้ Bonobo มีความสุขที่นี่ ฉันเชื่อว่าทั้งข้อกังวลของ Andre และ Piers ควรได้รับการแก้ไขแล้ว ปัญหา TeamCity นั้นถูกทำเครื่องหมายว่าปิดและฉันไม่พบปัญหาใด ๆ กับการใช้ที่เก็บส่วนกลางส่วนกลาง
Quinn Bailey

9

หากคุณกำลังทำงานในสภาพแวดล้อม Windows คุณเคยพิจารณาMercurialหรือไม่? เป็นระบบควบคุมเวอร์ชันแจกจ่ายเช่น Git แต่รวมเข้ากับ Windows ได้อย่างเรียบร้อยและง่ายดาย


9
เป็นความจริงที่ว่าการใช้ Mercurial บนเครื่อง Windows นั้นง่ายกว่ามากอย่างน้อยก็เท่าที่ความสามารถในการซิงค์ที่เก็บนั้นเกี่ยวข้อง ไม่ใช่คำตอบที่มีประโยชน์มากหากคุณต้องใช้ Git จริงๆ!
Frank Shearar

นอกจากนี้ Bazaar ยังทำงานบนหน้าต่างโดยกำเนิด มันยังมีการสนับสนุนทางการค้า
hasen

7

การติดตั้ง CygWin เป็นการใช้งานเกินความจำเป็นโปรดอ่านบทช่วยสอนนี้เกี่ยวกับวิธีการทำงานที่เร็วขึ้นและเป็นระบบ:

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


ฉันไปงานปาร์ตี้ช้า แต่ตอนนี้ลิงก์นี้เปลี่ยนเส้นทางไปที่tortoisegit.orgซึ่งพูดถึงลูกค้าทั้งหมด ฉันไม่พบอะไรเกี่ยวกับการใช้งานเซิร์ฟเวอร์ที่นั่น
Richard A

7

หากคุณได้รับข้อผิดพลาดcygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.หลังจากรันคำสั่ง:

cygrunsrv --start gitd

นั่นหมายความว่าคุณไม่ได้สร้างโฟลเดอร์ 'base-path'

การสร้างโฟลเดอร์ '/ git' และเรียกใช้คำสั่งใหม่จะแก้ไขปัญหานี้


คุณยังสามารถรับข้อผิดพลาดนี้ได้หาก/gitสิทธิ์ NTFS ของคุณไม่อนุญาตให้เข้าถึงการอ่าน / เขียนบัญชีบริการ (SYSTEM)
spoulson

5

ฉันกำลังใช้ssh daemon ของ cygwin บน Windowsเพื่อให้บริการและอนุญาตการเข้าถึงจากระยะไกลไปยัง repo ของฉัน มันใช้งานได้ดีฉันสามารถควบคุมได้อย่างสมบูรณ์ว่าใครเข้าถึง repo ของฉันด้วยใบรับรอง ssh ของพวกเขาและประสิทธิภาพการทำงานแม้ผ่านลิงก์ WAN และ VPN ระยะไกล

ทางออกก็คือการใช้ Gitosis เป็นเครื่องมือที่ทำให้โฮสติ้งรีโพสง่ายขึ้นมาก


คุณทำให้ git daemon ทำงานร่วมกับ cygwin ได้อย่างไร ฉันมีการตั้งค่า ssh daemon และฉันได้ทดสอบการล็อกอินเข้าสู่เครื่องของฉันผ่าน ssh แต่เมื่อใดก็ตามที่ฉันพยายามเรียกใช้ git daemon มันก็แฮงค์
Thiru

คุณทำให้ gitosis ทำงานบน windows ได้อย่างไรเนื่องจากมีข้อผิดพลาด: github.com/res0nat0r/gitosis/issues#issue/1
dalore

4

คุณไม่จำเป็นต้องโฮสต์บริการคุณยังสามารถสร้างที่เก็บที่แชร์บนไดรฟ์ที่แชร์ได้ เพียงสร้างที่เก็บเปล่า คุณสามารถโคลน repo ที่มีอยู่ลงในที่แชร์โดยใช้: "git clone --bare --shared [source] [dest]" คุณยังสามารถเริ่มต้นที่เก็บใหม่โดยใช้ "git init --bare --shared = all"

เฮงค์


3
ใช่คุณสามารถสร้างที่เก็บที่ใช้ร่วมกันบนไดรฟ์ได้ แต่ฉันจะไม่สามารถเข้าถึงที่เก็บนั้นได้เว้นแต่ฉันจะอยู่บนเครือข่ายเดียวกับที่เก็บ เป้าหมายของคำถามคือการอนุญาตให้เข้าถึงพื้นที่เก็บข้อมูลจากระยะไกลสำหรับเพื่อนร่วมงานที่ทำงานนอกสถานที่
Jeff Fritz

3
นี่ไม่ใช่วิธีแก้ปัญหาจริงๆและดูเหมือนจะเป็นเรื่องที่น่าสงสัยที่ต้องทำต่อไป
Pat O


4

ตอนนี้ msysGit รองรับ git daemon! มันใช้งานได้ดี (อย่างน้อยสำหรับฉัน) ฉันจะพยายามทำให้มันทำงานเป็นบริการ ...


มันรองรับทั้งดันและดึงหรือไม่? เนื่องจากมีปัญหาcode.google.com/p/msysgit/issues/detail?id=457เมื่อทำการพุช
Vadim

คุณได้ทำงานนี้เป็นบริการหรือไม่? คุณรู้จักคู่มือ "เริ่มต้นใช้งาน" หรือไม่?
Craig McQueen


2

ใน Windows คุณสามารถให้บริการที่เก็บ Git ด้วย Apache ผ่าน HTTP หรือ HTTPS โดยใช้ส่วนขยาย DAV

จากนั้นเส้นทางที่เก็บ Git สามารถป้องกันได้ด้วยการตรวจสอบการพิสูจน์ตัวตน Apache เช่นการ จำกัด เฉพาะที่อยู่ IP หรือการพิสูจน์ตัวตนประเภท htpasswd / htdigest

ข้อ จำกัด ของการใช้การตรวจสอบความถูกต้อง htpasswd / htdigest คือชื่อผู้ใช้: รหัสผ่านจะถูกส่งไปใน Git URL ที่ร้องขอดังนั้นการ จำกัด การเข้าถึง Git URL สำหรับที่อยู่ IP บางรายการจะดีกว่า

แก้ไข:โปรดทราบว่าคุณสามารถปล่อยรหัสผ่านออกจาก Git URL และ Git จะแจ้งให้คุณป้อนรหัสผ่านเมื่อกดและดึง / ดึงแทน

การใช้ HTTPS หมายความว่าข้อมูลทั้งหมดจะถูกเข้ารหัสในการถ่ายโอน

ง่ายพอที่จะตั้งค่าและใช้งานได้

ตัวอย่างต่อไปนี้แสดงการรวมกันของการควบคุมการเข้าถึงตามที่อยู่ IP และผู้ใช้: รหัสผ่านผ่าน HTTP มาตรฐาน

ตัวอย่าง 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>

ตัวอย่าง. 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

ที่ทำงานฉันใช้ GitBlit GO ติดตั้งบน Windows Server ทำงานได้อย่างไม่มีที่ติและทำงานร่วมกับ ActiveDirectory สำหรับการตรวจสอบผู้ใช้และการอนุญาต นอกจากนี้ยังฟรีและโอเพนซอร์ส (ได้รับอนุญาตจาก Apache)

หน้าแรกของ GitBlit

รองรับการเข้าถึง HTTP (S) เท่านั้นไม่มี SSH แต่ใน Windows คุณไม่ควรต้องการอะไรเพิ่มเติม


พวกเขามีการสนับสนุน SSL (HTTPS) ตามเอกสารการตั้งค่าบนไซต์
Dandré

ใช่รองรับ HTTP และ HTTPS (ฉันใช้ HTTPS โดยเฉพาะ) แต่ไม่มี SSH อัปเดตการตอบกลับแล้ว
Gian Marco

2

นี่คือคำตอบปี 2015 สำหรับคำถามที่มีอายุมากกว่า 7 ปี

สำหรับการชำระเงิน $ 10 ครั้งเดียวจากhttps://bitbucket.org/product/serverหนึ่งสามารถซื้อแบบ 64 บิตใช้งาน Windows ได้ถึง10 คน

เห็นได้ชัดว่าเวอร์ชัน 32 บิตสามารถใช้ได้ผ่านทางไฟล์เก็บถาวรเท่านั้น

Bitbucket เซิร์ฟเวอร์เป็นที่รู้จักกันก่อนหน้านี้เป็นของสะสม

โปรดทราบว่าฉันไม่ได้ลองใช้เวอร์ชันนี้ แต่ $ 10 ดูเหมือนจะเป็นข้อเสนอที่ดี ที่นี่ฉันอ่านว่า Atlassian มอบเงิน $ 10 ให้กับการกุศล FWIW


0

ฉันคิดว่าสิ่งที่เฮงค์พูดคือคุณสามารถสร้างที่เก็บที่ใช้ร่วมกันในไดรฟ์จากนั้นคัดลอกไปยังตำแหน่งทั่วไปที่คุณทั้งคู่สามารถเข้าถึงได้ หากมีเซิร์ฟเวอร์ของ บริษัท หรือบางอย่างที่คุณทั้งคู่มีสิทธิ์เข้าถึง ssh คุณสามารถวางที่เก็บไว้ที่ใดก็ได้ที่คุณสามารถนำ SCP นั้นกลับไปที่คอมพิวเตอร์ของคุณเองได้แล้วดึงจากที่เก็บนั้น ฉันทำสิ่งนี้เพื่อตัวเองในช่วงเวลาสั้น ๆ เนื่องจากฉันมีคอมพิวเตอร์สองเครื่อง เป็นเรื่องยุ่งยาก แต่ได้ผล


2
"ขาดการแชร์โฟลเดอร์" คำถามเดิมกล่าว
Lightness Races ใน Orbit

0

สำหรับ Windows 7 x64 และ Cygwin 1.7.9 ฉันจำเป็นต้องใช้ / usr / bin / gitd เป็นอาร์กิวเมนต์ args ของ cygrunsrv

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

นอกจากนี้ฉันต้องเรียกใช้ bash ในฐานะผู้ดูแลระบบเพื่อติดตั้งบริการ

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