Menghosting Git Repository di Windows


108

Apakah saat ini ada cara untuk menghosting repositori Git bersama di Windows? Saya memahami bahwa Anda dapat mengkonfigurasi layanan Git di Linux dengan:

git daemon

Apakah ada opsi Windows asli, selain berbagi folder, untuk menghosting layanan Git?

EDIT: Saat ini saya menggunakan instalasi cygwin dari git untuk menyimpan dan bekerja dengan repositori git di Windows, tetapi saya ingin mengambil langkah selanjutnya untuk menghosting repositori dengan layanan yang dapat menyediakan akses ke orang lain.


35
Perusahaan saya saat ini tidak memiliki mesin Unix atau Linux ... membawa penyedia Kontrol Sumber baru dan sistem operasi pada saat yang sama mungkin sedikit ... traumatis.
Jeff Fritz

1
Ada apa dengan git-daemon? AFAIK berfungsi dengan baik di Windows.
Aristoteles Pagaltzis

10
Menginstal Git menggunakan penginstal msysgit standar untuk Windows tampaknya tidak dapat diinstal git daemon. : \
Tim Visher

1
Ada penginstal CopSSH dan msysgit yang dibundel yang mungkin ingin Anda lihat. Ini menggunakan otentikasi kunci publik, dan membuatnya mudah. Penafian: Saya webmaster - Saya memulai proyek setelah membaca tutorial Tim Davis tentang menyiapkan server git yang aman.
Lilith River

3
Sebagai catatan: Git untuk Windows telah menyertakan versi git daemon yang berfungsi sejak versi 1.7.4 (dirilis Februari 2011). Jadi cygwin tidak lagi dibutuhkan. Lihat juga stackoverflow.com/q/5186070/291641
patthoyts

Jawaban:


75

Berikut adalah beberapa langkah yang dapat Anda ikuti untuk menjalankan git daemon di bawah Windows:

(Prasyarat: Instalasi Cygwin default dan klien git yang mendukung git daemon)

Langkah 1 : Buka shell bash

Langkah 2 : Di direktori / cygdrive / c / cygwin64 / usr / local / bin /, buat file bernama "gitd" dengan konten berikut:

#!/bin/bash

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

Langkah 3 : Jalankan perintah cygrunsrv berikut dari prompt yang ditinggikan (yaitu sebagai admin) untuk menginstal skrip sebagai layanan (Catatan: anggap Cygwin diinstal di C: \ cygwin64):

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

Langkah 4 : Jalankan perintah berikut untuk memulai layanan:

cygrunsrv --start gitd

Kamu selesai. Jika Anda ingin mengujinya, berikut ini skrip cepat dan kotor yang menunjukkan bahwa Anda dapat mendorong protokol git ke komputer lokal Anda:

#!/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
Jika saya bisa mengedit posting ini, saya akan menambahkan yang berikut: Prasyarat: cygwin dengan paket git dan cygrunsrv diinstal.
Mario

2
Catatan lain: sepenuhnya memenuhi syarat jalur ke git di dalam skrip shell gitd. Di salah satu mesin saya, MSYSGit sedang dimulai, bukan cygwin-git, saat dijalankan sebagai proses windows. MSYSGit tidak mendukung mode daemon sehingga layanan gagal dimulai.
Mario

26
Saya tidak pernah menganggap solusi Cygwin sebagai "bekerja di Windows". Ini seperti mengatakan "menjalankan linux di VM berfungsi di Windows". Tapi itu hanya pendapat puristik saya;)
Benteng

3
catatan singkat: / usr / bin tidak berfungsi untuk saya tetapi menempatkan di / bin berhasil (dan menggunakan c: / cygwin / bin / gitd di cygrunsrv). Tidak yakin berapa umur instalasi cygwin saya tetapi sepertinya / usr / bin adalah tautan ke whats in / bin yang tidak akan diketahui windows ... Juga agak jelas, tapi ingat untuk membuat folder / git di c: / cygwin /
armyofda12mnkeys

3
@Rook - Sebaliknya, rangkaian alat Cygwin tidak berbeda dari aplikasi pihak ketiga lainnya yang mungkin Anda instal. Cygwin bukanlah mesin virtual, tetapi seperangkat alat yang sudah dikemas sebelumnya. Ini hanya satu set Windows executable dan dll seperti yang lainnya di mesin Anda.
Derek Greer

16

GitStack mungkin pilihan terbaik Anda. Saat ini gratis (untuk maksimal 2 pengguna) dan open source pada saat penulisan.


2
Sepertinya itu dibatasi untuk proyek sumber terbuka atau siswa: "GitStack gratis untuk proyek sumber terbuka & siswa!"
ccellar

12

Berikut server git khusus untuk windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Bagaimana status server Bonobo? Apakah berfungsi penuh? Saya tidak tahu dari dokumennya, tapi kelihatannya sangat menarik.
Jeff Fritz

1
@JeffFritz: baru saja berhenti menggunakannya. Hal sialan tidak memperbarui status repositori ( git update-server-info) setelah push HTTP, dan logika ini tidak diterapkan oleh pustaka Git (GitSharp) mereka. Saya ragu ini akan mencapai kondisi kerja yang nyata dalam waktu dekat.
André Caron

Juga, tidak bekerja dengan Teamcity (yang merupakan alasan utama saya tidak menggunakannya) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg

3
Selamat pengguna Bonobo di sini. Saya yakin kekhawatiran Andre dan Piers harus diselesaikan sekarang. Masalah TeamCity itu ditandai ditutup dan saya tidak mengalami masalah apa pun dengan menggunakan repositori terpusat terpusat.
Quinn Bailey

9

Jika Anda bekerja di lingkungan Windows, apakah Anda sudah mempertimbangkan Mercurial ? Ini adalah sistem kontrol versi terdistribusi seperti Git, tetapi terintegrasi jauh lebih rapi dan mudah dengan Windows.


9
Memang benar bahwa jauh lebih mudah menggunakan Mercurial di mesin Windows, setidaknya sejauh menyangkut penyinkronan repositori. Bukan jawaban yang terlalu berguna jika Anda benar-benar harus menggunakan Git!
Frank Shearar

Bazaar juga berfungsi secara native di windows; bahkan memiliki dukungan komersial.
hasen


7

Jika Anda mendapatkan kesalahan cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.setelah menjalankan perintah:

cygrunsrv --start gitd

itu berarti Anda tidak membuat folder 'jalur dasar'.

Membuat folder '/ git' dan menjalankan kembali perintah akan memperbaikinya.


Anda juga bisa mendapatkan kesalahan ini jika /gitizin NTFS Anda tidak mengizinkan akses baca / tulis akun layanan (SISTEM).
spoulson

5

Saat ini saya menggunakan daemon ssh cygwin di Windows untuk melayani dan mengizinkan akses jarak jauh ke repo saya. Ini berfungsi dengan cukup baik, saya memiliki kendali penuh atas siapa yang mengakses repo saya dengan sertifikat ssh mereka, dan kinerjanya menyala, bahkan melalui tautan WAN dan VPN jarak jauh.

Solusi lain adalah dengan menggunakan Gitosis . Ini adalah alat yang membuat repo hosting jauh lebih mudah.


Bagaimana Anda membuat git daemon bekerja dengan cygwin? Saya memiliki pengaturan daemon ssh dan saya telah menguji masuk ke mesin saya melalui ssh tetapi setiap kali saya mencoba menjalankan daemon git itu hanya hang.
Thiru

Bagaimana Anda membuat gitosis bekerja di windows karena ada bug: github.com/res0nat0r/gitosis/issues#issue/1
dalore

4

Anda tidak perlu menghosting layanan, Anda juga dapat membuat repositori bersama di drive bersama. Buat saja repositori kosong. Anda dapat mengkloning repo yang ada menjadi repo bersama menggunakan: "git clone --bare --shared [source] [dest]". Anda juga bisa masuk ke repositori baru menggunakan "git init --bare --shared = all".

Henk


3
Ya, Anda dapat membuat repositori bersama di drive, tetapi saya TIDAK akan dapat mengakses repositori itu kecuali saya berada di jaringan yang sama dengan repositori tersebut. Tujuan dari pertanyaan ini adalah untuk mengizinkan akses jarak jauh ke repositori untuk rekan kerja yang bekerja di luar lokasi
Jeff Fritz

3
Ini sebenarnya bukan solusi untuk pertanyaan dan sepertinya hal yang cukup dipertanyakan untuk dilakukan.
Pat O


4

Sekarang msysGit mendukung git daemon! Ini berfungsi dengan baik (setidaknya untuk saya). Saya akan mencoba membuatnya berjalan sebagai layanan ...


apakah itu mendukung dorong dan tarik? Karena ada masalah code.google.com/p/msysgit/issues/detail?id=457 saat melakukan push.
Vadim

Jadi, apakah Anda menjalankan ini sebagai layanan? Apakah Anda tahu tentang panduan "memulai"?
Craig McQueen

4

Manajer SCM

  • Server http ringan untuk repositori Git, Mercurial, Subversion dari sebuah kotak (hanya diperlukan Java)
  • Antarmuka web untuk pengelolaan pengguna, ACL, repo

2

Di Windows, Anda juga dapat melayani repositori Git dengan Apache melalui HTTP atau HTTPS, menggunakan ekstensi DAV.

Jalur repositori Git kemudian dapat dilindungi dengan pemeriksaan otentikasi Apache seperti membatasi ke alamat IP tertentu atau otentikasi jenis htpasswd / htdigest.

Batasan penggunaan otentikasi htpasswd / htdigest adalah bahwa nama pengguna: kata sandi diteruskan di URL Git yang diminta, jadi lebih baik membatasi akses ke URL Git ke alamat IP tertentu.

Edit: Catatan, Anda dapat membiarkan kata sandi keluar dari URL Git dan Git akan meminta Anda memasukkan kata sandi saat push dan fetch / pull sebagai gantinya.

Menggunakan HTTPS berarti semua data dienkripsi saat ditransfer.

Cukup mudah untuk disiapkan, dan berfungsi.

Contoh berikut menunjukkan kombinasi kontrol akses dengan alamat IP dan pengguna: kata sandi melalui HTTP standar.

Contoh 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>

Contoh .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

Di tempat kerja saya menggunakan GitBlit GO yang diinstal di Windows Server. Bekerja dengan sempurna dan terintegrasi dengan baik dengan ActiveDirectory untuk otentikasi dan otorisasi pengguna. Ini juga gratis dan open source (berlisensi Apache)

Beranda GitBlit

Hanya akses HTTP (S) yang didukung, tidak ada SSH, tetapi di bawah Windows Anda tidak memerlukan apa-apa lagi.


Mereka memang memiliki dukungan SSL (HTTPS) berdasarkan dokumen penyiapan di situs.
Dandré

Ya, HTTP dan HTTPS didukung (Saya menggunakan HTTPS secara eksklusif) tetapi tidak ada SSH. Tanggapan diperbarui.
Gian Marco

2

ini adalah jawaban tahun 2015 untuk pertanyaan yang berusia lebih dari 7 tahun.

Untuk pembayaran satu kali $ 10, dari https://bitbucket.org/product/server , seseorang dapat membeli lisensi Windows 64-bit hingga untuk 10 pengguna .

Rupanya versi 32-bit hanya tersedia melalui arsipnya.

Server Bitbucket sebelumnya dikenal sebagai Stash .

Harap dicatat bahwa saya belum mencoba versi ini tetapi $ 10 sepertinya bagus; di sini saya membaca bahwa Atlassian memberikan $ 10 untuk amal. FWIW


0

Menurut saya apa yang dikatakan Henk adalah Anda dapat membuat repositori bersama di drive dan kemudian menyalinnya ke beberapa lokasi umum yang Anda berdua miliki aksesnya. Jika ada beberapa server perusahaan atau sesuatu yang Anda berdua memiliki akses ssh, Anda dapat meletakkan repositori di suatu tempat di mana Anda dapat SCP kembali ke komputer Anda, dan kemudian menariknya. Saya melakukan ini untuk diri saya sendiri sebentar, karena saya memiliki dua komputer. Ini merepotkan, tetapi berhasil.


2
"kekurangan folder berbagi", kata pertanyaan awal.
Balapan Ringan di Orbit

0

Untuk Windows 7 x64 dan Cygwin 1.7.9 saya perlu menggunakan / usr / bin / gitd sebagai argumen args dari cygrunsrv

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

Selain itu, saya perlu menjalankan bash sebagai Administrator untuk menginstal layanan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.