Размещение репозитория Git в Windows

108

Есть ли в настоящее время способ разместить общий репозиторий Git в Windows? Я понимаю, что вы можете настроить службу Git в Linux с помощью:

git daemon

Есть ли собственный вариант Windows, за исключением общих папок, для размещения службы Git?

РЕДАКТИРОВАТЬ: в настоящее время я использую cygwin install git для хранения и работы с репозиториями git в Windows, но я хотел бы сделать следующий шаг по размещению репозитория со службой, которая может предоставлять доступ другим.

Джефф Фриц
источник
35
У моего нынешнего работодателя нет машин с Unix или Linux ... одновременное использование нового поставщика управления версиями и операционной системы может быть немного ... травматичным.
Джефф Фриц,
1
Что не так с git-daemon? AFAIK он отлично работает в Windows.
Аристотель Пагальцис,
10
Установка Git с использованием стандартного установщика msysgit для Windows не устанавливается git daemon. : \
Тим Вишер
1
Есть в комплекте установщик CopSSH и msysgit, который вы, возможно, захотите посмотреть. Он использует аутентификацию с открытым ключом и упрощает работу. Отказ от ответственности: я веб-мастер - я начал проект после прочтения учебника Тима Дэвиса по настройке безопасного сервера git.
Lilith River
3
Для справки: Git для Windows включает рабочую версию git daemon начиная с версии 1.7.4 (выпущенной в феврале 2011 г.). Таким образом, cygwin больше не требуется. См. Также stackoverflow.com/q/5186070/291641
patthoyts

Ответы:

75

Вот несколько шагов, которые вы можете выполнить, чтобы запустить демон git под Windows:

(Предварительные требования: установка Cygwin по умолчанию и клиент git, поддерживающий демон git)

Шаг 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 --start 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.
Марио
2
Еще одно замечание: полностью укажите путь к git внутри сценария оболочки gitd. На одной из моих машин MSYSGit запускался вместо cygwin-git при выполнении в качестве процесса Windows. MSYSGit не поддерживает режим демона, поэтому служба не запустилась.
Марио
26
Я никогда не воспринимал решения Cygwin как «работающие в Windows». Это все равно, что сказать «Linux на виртуальной машине работает и в Windows». Но это всего лишь мое пуристическое мнение;)
Ладья
3
быстрое примечание: / usr / bin у меня не сработало, но сработало размещение в / bin (и использование c: / cygwin / bin / gitd в cygrunsrv). Не уверен, сколько лет моей установке cygwin, но похоже, что / usr / bin - это ссылка на то, что находится в / bin, о котором окна не знают ... Также вроде очевидно, но не забудьте создать папку / git в c: / cygwin /
armyofda12mnkeys
3
@Rook - Напротив, набор инструментов Cygwin ничем не отличается от любых других сторонних приложений, которые вы можете установить. Cygwin - это не виртуальная машина, а готовый набор инструментов. Это просто набор исполняемых файлов и DLL Windows, как и все остальное на вашем компьютере.
Дерек Грир
16

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

poiuytrez
источник
2
Похоже, это было ограничено проектами с открытым исходным кодом или студенческими проектами: «GitStack бесплатен для проектов с открытым исходным кодом и студенческих проектов!»
ccellar
12

Вот выделенный сервер git для Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki

Дэниел О
источник
В каком состоянии находится сервер Bonobo? Он полностью функционален? Я не могу сказать по документам, но это выглядит очень убедительно.
Джефф Фриц
1
@JeffFritz: просто перестал им пользоваться. Эта чертова штука не обновляет состояние репозитория ( git update-server-info) после HTTP push, и эта логика не реализована их библиотекой Git (GitSharp). Сомневаюсь, что в ближайшее время он выйдет на реальное рабочее состояние.
Андре Карон
Кроме того, не работает с Teamcity (что является основной причиной того, что я не использую его) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Пирс Карсенбарг
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

это означает, что вы не создавали папку «base-path».

Создание папки '/ git' и повторный запуск команды исправят это.

Исаак
источник
Вы также можете получить эту ошибку, если ваши /gitразрешения NTFS не разрешают доступ для чтения / записи учетной записи службы (SYSTEM).
spoulson
5

В настоящее время я использую демон ssh cygwin в Windows для обслуживания и предоставления удаленного доступа к моему репо. Он работает довольно хорошо, я полностью контролирую, кто получает доступ к моему репо по их сертификатам ssh, а производительность пламени даже по удаленным каналам WAN и VPN.

Другое решение - использовать Gitosis . Это инструмент, который значительно упрощает размещение репозиториев.

Мэттью Маккалоу
источник
Как вы заставили демон git работать с cygwin? У меня есть установка демона ssh, и я тестирую вход на свою машину через ssh, но всякий раз, когда я пытаюсь запустить демон git, он просто зависает.
Тиру
Как вы заставили gitosis работать с окнами из-за ошибки: github.com/res0nat0r/gitosis/issues#issue/1
dalore
4

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

Хенк

Хенк
источник
3
Да, вы можете создать общий репозиторий на диске, но я НЕ смогу получить доступ к этому репозиторию, если я не нахожусь в той же сети, что и репозиторий. Цель вопроса - разрешить удаленный доступ к репозиторию коллеге, который работает за пределами офиса
Джефф Фриц
3
На самом деле это не решение вопроса и в любом случае кажется довольно сомнительным.
Pat O
4

Теперь msysGit поддерживает git daemon! Он отлично работает (по крайней мере, у меня). Я постараюсь запустить его как службу ...

Артем
источник
поддерживает ли он и толкание, и тягу? Потому что возникает проблема code.google.com/p/msysgit/issues/detail?id=457 при выполнении push .
Вадим
Так у вас это работает как услуга? Вы знаете руководство по началу работы?
Craig McQueen
4

SCM-менеджер

  • Легкий http-сервер для репозиториев Git, Mercurial, Subversion из коробки (нужна только Java)
  • Веб-интерфейс для управления пользователями, ACL, репозиториями
Ленивый барсук
источник
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

## 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 Server ранее назывался Stash .

Обратите внимание, что я не пробовал эту версию, но 10 долларов кажутся хорошей сделкой; здесь я читал, что Atlassian раздает 10 долларов на благотворительность. FWIW

GerryLowry
источник
0

Я думаю, что Хенк говорит, что вы можете создать общий репозиторий на диске, а затем скопировать его в какое-нибудь общее место, к которому у вас обоих есть доступ. Если есть какой-то сервер компании или что-то, к чему у вас обоих есть доступ по ssh, вы можете поместить репозиторий в какое-нибудь место, где вы сможете SCP вернуть его на свой компьютер, а затем извлечь из него. Некоторое время я делал это для себя, так как у меня два компьютера. Это хлопотно, но работает.

Ибрагим
источник
2
"если не считать общих папок", - гласит исходный вопрос.
Гонки за легкостью на орбите,
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 от имени администратора.

дисрвптор
источник