Хостинг сховища Git у Windows


108

Наразі існує спосіб розміщення спільного сховища Git у Windows? Я розумію, що ви можете налаштувати службу Git в Linux за допомогою:

git daemon

Чи є в рідній системі Windows можливість брати участь у папках, щоб розмістити послугу Git?

EDIT: Зараз я використовую cygwin install git для зберігання та роботи з сховищами git у Windows, але я хотів би зробити наступний крок розміщення сховища з сервісом, який може забезпечити доступ до інших.


35
У мого нинішнього роботодавця немає жодних апаратів Unix чи Linux ... введення нового постачальника джерел контролю та операційної системи одночасно може бути трохи ... травматичним.
Джефф Фріц

1
Що не так з git-демон? AFAIK працює чудово у Windows.
Арістотель Пагальціс

10
Установка Git за допомогою стандартного інсталятора msysgit для Windows, здається, не встановлюється git daemon. : \
Тім Вішер

1
Існує пакет встановлення CopSSH та msysgit, який ви можете подивитися. Він використовує аутентифікацію відкритих ключів і робить його легким. Відмова: Я веб-майстер - я розпочав проект, прочитавши підручник Тіма Девіса про налаштування захищеного сервера git.
Річка Ліліт

3
Для запису: Git для Windows включила працюючу версію git daemon з версії 1.7.4 (випущена в лютому 2011). Тож cygwin більше не потрібен. Дивіться також stackoverflow.com/q/5186070/291641
patthoyts

Відповіді:


75

Ось декілька кроків, які ви можете виконати, щоб запустити демон git під Windows:

(Передумови: установка Cygwin за замовчуванням та клієнт git, що підтримує git daemon)

Крок 1 : Відкрийте оболонку bash

Крок 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 на свою локальну машину:

#!/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 Mario

2
Ще одна примітка: повністю кваліфікуйте шлях до git всередині скрипта gitd shell. На одній із моїх машин MSYSGit запускався замість cygwin-git під час виконання Windows. MSYSGit не підтримує режим демон, тому сервіс не вдалося запустити.
Маріо

26
Я ніколи не сприймав рішення Cygwin як "працюючі в Windows". Це як би сказати, що "запуск Linux в VM працює в Windows". Але це лише моя пуристична думка;)
Грач

3
швидка примітка: / usr / bin не працював для мене, але розміщення в / bin працювало (і використовуючи c: / cygwin / bin / gitd у cygrunsrv). Не знаю, скільки років встановити cygwin, але виглядає / usr / bin - це посилання на те, що в / bin, про який Windows не знає ... Також явно очевидно, але не забудьте створити папку / git в c: / cygwin /
Armyofda12mnkeys

3
@Rook - Навпаки, набір інструментів Cygwin не відрізняється від будь-яких інших сторонніх програм, які ви можете встановити. Cygwin - це не віртуальна машина, а заздалегідь запакований набір інструментів. Це просто набір виконуваних файлів Windows, а також, як і все на вашій машині.
Дерек Грір

16

GitStack може стати найкращим вибором. Наразі це безкоштовно (для 2 користувачів) та відкрите джерело на момент написання.


2
Схоже, це було обмежено для відкритих джерел чи студентських проектів: "GitStack безкоштовний для відкритих та студентських проектів!"
ccellar

12

Ось виділений сервер git для windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki


Який стан сервера Bonobo? Це повністю функціонально? Я не можу сказати з документів, але це виглядає дуже переконливо.
Джефф Фріц

1
@JeffFritz: просто перестав його використовувати. Чортова річ не оновлює стан репозиторію ( git update-server-info) після натискання HTTP, і ця логіка не реалізована їх бібліотекою Git (GitSharp). Я сумніваюся, що незабаром він дійде до справжнього робочого стану.
Андре Карон

Крім того, не працює з Teamcity (що є основною причиною того, що я його не використовую) github.com/jakubgarfield/Bonobo-Git-Server/isissue/11
Piers Karsenbarg

3
Щасливий користувач Bonobo тут. Я вважаю, що проблеми Андре та Пірса мають бути вирішені зараз. Ця проблема TeamCity була позначена закритою, і я не мав жодних проблем із використанням централізованого централізованого сховища.
Квінн Бейлі

9

Якщо ви працюєте в середовищі Windows, чи вважали ви Mercurial ? Це розподілена система управління версіями на зразок Git, але інтегрується набагато акуратніше та легше з Windows.


9
Це правда, що набагато простіше використовувати Mercurial на машинах Windows, принаймні, що стосується можливості синхронізації сховищ. Не дуже корисна відповідь, якщо вам справді доводиться використовувати Git!
Френк Ширар

Також Bazaar працює на вікнах; він навіть має комерційну підтримку.
hasen

7

Встановлення CygWin - це надмірне прочитання, прочитайте цей підручник про те, як це зробити швидше та рідніше:

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


Я спізнююсь на вечірку, але це посилання зараз перенаправляє на tortoisegit.org, який розповідає про клієнта. Я нічого не можу знайти про запуск сервера там.
Річард А

7

Якщо ви отримаєте помилку cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.після запуску команди:

cygrunsrv --start gitd

це означає, що ви не створили папку «базовий шлях».

Створення папки '/ git' та повторне виконання команди виправлять це.


Ви також можете отримати цю помилку, якщо ваші /gitдозволи NTFS не дозволяють обліковому запису послуги (SYSTEM) читати / записувати доступ.
подружжя

5

Наразі я використовую sh-демон Cygwin у Windows для обслуговування та надання віддаленого доступу до мого репо. Це працює досить добре, я маю повний контроль над тим, хто отримує доступ до мого репо за своїми сертифікатами ssh, а продуктивність запалює навіть над віддаленими посиланнями WAN та VPN.

Ще одне рішення - використовувати Гітоз . Це інструмент, який значно спрощує розміщення репостів.


Як ви змусили демона git працювати з cygwin? У мене налаштування демона ssh і я тестую вхід у свою машину через ssh, але кожного разу, коли я намагаюся запустити демон git, він просто зависне.
Тіру

Як у вас трапився гітоз, працюючи над Windows, оскільки є помилка: github.com/res0nat0r/gitosis/isissue#issue/1
dalore

4

Вам не потрібно розміщувати послугу, ви також можете створити спільний сховище на спільному диску. Просто створіть оголене сховище. Ви можете клонувати наявне репо в спільне, використовуючи: "git clone --bare --shared [source] [dest]". Ви також можете запустити нове сховище, використовуючи "git init --bare --shared = all".

Хенк


3
Так, ви можете створити спільний сховище на диску, але я НЕ матиму доступу до цього сховища, якщо я не буду в тій самій мережі, що і сховище. Мета питання - дозволити віддалений доступ до сховища для співробітника, який працює за межами сайту
Джефф Фріц

3
Це насправді не вирішення питання і все одно здається досить сумнівною справою.
Пт О


4

Тепер msysGit підтримує git демон! Це добре працює (принаймні для мене). Я спробую змусити його запустити як службу ...


це підтримує як натискання, так і тягнення? Оскільки виникає проблема code.google.com/p/msysgit/isissue/detail?id=457 під час натискань.
Вадим

Так у вас це працює як послуга? Чи знаєте ви керівництво "для початку роботи"?
Крейг МакКуїн


2

У Windows ви також можете обслуговувати сховища Git з Apache через HTTP або HTTPS, використовуючи розширення DAV.

Шлях репозиторію Git може бути захищений за допомогою перевірок автентичності Apache, таких як обмеження певних IP-адрес або аутентифікація типу htpasswd / htdigest.

Обмеженням використання автентифікації htpasswd / htdigest є те, що ім'я користувача: пароль передається у запитувану URL-адресу Git, тому краще обмежувати доступ до URL-адреси Git до певних IP-адрес.

Редагувати: Зауважте, ви можете залишити пароль поза URL-адресою Git, і 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. Відповідь оновлено.
Джан Марко

2

це відповідь у 2015 році на питання, якому старше 7 років.

За одноразовий платіж у розмірі 10 доларів США за допомогою https://bitbucket.org/product/server можна придбати 64-бітну ліцензію Windows для 10 користувачів .

Мабуть, 32-розрядні версії доступні лише через їх архів.

Сервер Bitbucket раніше був відомий як Stash .

Зверніть увагу, що я не пробував цю версію, але 10 доларів здається гарною угодою; тут я прочитав, що Atlassian дає 10 доларів на благодійність. FWIW


0

Я думаю, що Хенк говорить, що ви можете створити спільне сховище на диску, а потім скопіювати його в якесь загальне місце, до якого ви обидва маєте доступ. Якщо є якийсь сервер компанії або щось, до чого ви обидва маєте доступ до ssh, ви можете помістити сховище кудись, де ви зможете повернути його на власний комп'ютер, а потім витягнути з нього. Я робив це для себе трохи, оскільки маю два комп’ютери. Це клопоти, але це працює.


2
"не має спільного доступу до папок", - йдеться в оригінальному питанні.
Гонки легкості на орбіті

0

Для Windows 7 x64 та Cygwin 1.7.9 мені потрібно було використовувати / usr / bin / gitd як аргумент аргументів cygrunsrv

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

Також мені потрібно було запустити bash як адміністратор, щоб встановити службу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.