Хостинг сховища 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.