Хостинг Git Repository в Windows

107

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

git daemon

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

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

  • 34
    У моего нынешнего работодателя нет машин Unix или Linux ... привлечение нового поставщика Source Control и операционной системы одновременно может быть немного ... травмирующим.
  • 1
    Что не так с git-daemon? AFAIK, он отлично работает на Windows.
Показать ещё 3 комментария
Теги:

16 ответов

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 из приглашения с повышенными правами (то есть, как admin), чтобы установить script в качестве службы (Примечание: предполагается, что 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

Вы закончили. Если вы хотите протестировать его, вот быстрый и грязный script, который показывает, что вы можете нажимать на 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
  • 0
    Спасибо большое за это. Это сработало отлично и сэкономило мне время!
  • 2
    Если бы я мог редактировать этот пост, я бы добавил следующее: Предварительные условия: cygwin с установленными пакетами git и cygrunsrv.
Показать ещё 13 комментариев
15

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

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

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

  • 0
    Каково состояние сервера Bonobo? Это полностью функционально? Я не могу судить по документам, но это выглядит очень убедительно.
  • 1
    @JeffFritz: просто перестал его использовать. Черт возьми, не обновляет состояние репозитория ( git update-server-info ) после HTTP push, и эта логика не реализована их библиотекой Git (GitSharp). Я сомневаюсь, что это скоро достигнет реального рабочего состояния.
Показать ещё 2 комментария
10

Если вы работаете в среде Windows, считаете ли вы Mercurial? Это распределенная система управления версиями, такая как Git, но интегрируется гораздо более аккуратно и легко с Windows.

  • 9
    Это правда, что Mercurial гораздо проще использовать на компьютерах с Windows, по крайней мере, если речь идет о возможности синхронизации репозиториев. Не очень полезный ответ, если вам действительно нужно использовать Git!
  • 0
    Также Bazaar изначально работает на Windows; у него даже есть коммерческая поддержка.
8

Если после выполнения команды вы получите сообщение об ошибке cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.:

cygrunsrv --start gitd

это означает, что вы не создали папку "базовый путь".

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

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

Установка CygWin является излишним, прочитайте этот учебник о том, как это сделать быстрее и native:

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

5

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

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

  • 0
    Как вы запустили git daemon в Cygwin? У меня есть настроенный демон ssh, и я тестирую вход на мою машину через ssh, но всякий раз, когда я пытаюсь запустить демон git, он просто зависает.
  • 0
    Как вы заставили Gitosis работать на Windows, когда есть ошибка: github.com/res0nat0r/gitosis/issues#issue/1
5

Считаете ли вы использование слоя cygwin? См. эту ссылку.

4

Диспетчер SCM

  • Легкий http-сервер для Git, Mercurial, Subversion repos из окна (требуется только Java)
  • Веб-интерфейс для управления пользователями, ACL, репозиториями
4

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

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

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

Хенка

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

На работе я использую GitBlit GO, установленный на Windows Server. Работайте безупречно и хорошо интегрируйтесь с ActiveDirectory для аутентификации и авторизации пользователей. Он также бесплатный и с открытым исходным кодом (с лицензией Apache)

Домашняя страница GitBlit

Поддерживается только доступ HTTP (S), нет SSH, но под Windows вам больше ничего не нужно.

  • 0
    Они имеют поддержку SSL (HTTPS) на основе документа настройки на сайте.
  • 0
    Да, HTTP и HTTPS поддерживаются (я использую исключительно HTTPS), но не SSH. Ответ обновлен.
2

В Windows вы также можете обслуживать репозитории Git с Apache через HTTP или HTTPS, используя расширение DAV.

После этого путь к хранилищу Git может быть защищен проверками подлинности Apache, такими как ограничение определенных IP-адресов или проверка подлинности типа htpasswd/htdigest.

Ограничение использования htpasswd/htdigest аутентификации заключается в том, что имя пользователя: пароль передается в запрошенном URL Git, поэтому лучше ограничивать доступ к URL-адресу Git к определенным IP-адресам.

Изменить: обратите внимание, вы можете оставить пароль из URL Git, а Git предложит вам пароль вместо push и fetch/pull.

Использование 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:[email protected]/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
1

это ответ 2015 года на вопрос, которому больше 7 лет.

За одноразовый платеж за 10 долларов, от https://bitbucket.org/product/server, можно приобрести 64-разрядную лицензию Windows для 10 пользователей.

По-видимому, 32-разрядные версии доступны только через их архив.

Сервер Bitbucket ранее был известен как Stash.

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

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 в качестве администратора для установки службы.

0

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

  • 2
    «если не делиться папками», - говорит оригинальный вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню