Как я могу сделать свой локальный репозиторий доступным для git -pull?

У меня есть рабочий репозиторий, в котором я работал без проблем; источник для этого хранилища находится на GitHub.

Я хотел бы сделать мой рабочий репозиторий доступным в качестве источника для моей машины сборки (виртуальная машина на другом физическом хосте), так что коммиты, которые я делаю с моей рабочей копией, можно построить и протестировать на машине сборки, не имея сначала пройти через GitHub. У меня уже есть сборка для репозитория GitHub, но я хотел бы, чтобы это было "золотым" хранилищем/сборкой; то есть, если что-то идет, сборка против GitHub должна быть гарантирована.

Я просмотрел документацию по URL Git и вижу, что есть возможность использовать URL-адрес в форме git://host.xz[:port]/path/to/repo.git/ (см., например, git -clone documentation). Я хочу сделать это самым простым способом с минимальной конфигурацией: я не хочу настраивать SSH-демон или веб-сервер, чтобы опубликовать его на моей машине сборки.

Я запускаю Windows 7 x64 RC, у меня установлены MSysGit и TortoiseGit, и я открыл Git порт по умолчанию (9814) на брандмауэре. Предположим, что рабочая копия repo находится в D:\Visual Studio Projects\MyGitRepo, а имя хоста - devbox. Сборка - это Windows Server 2008 x64. Я пытаюсь выполнить следующую команду на машине сборки с соответствующим выходом:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Я что-то пропустил?

Ответ 1

Существует пять возможностей для создания репозитория для переноса из:

  • локальная файловая система: git clone /path/to/repo или git clone file://path/to/repo. Меньшая работа, если у вас есть сетевая файловая система, но не очень эффективное использование сети. (Это почти точно решение, предложенное Joakim Elofsson)
  • Протоколы HTTP: git clone http://example.com/repo. Вам нужен любой веб-сервер, и вам также нужно запустить (возможно, автоматически, с помощью крючка) git-update-server-info, чтобы генерировать информацию, необходимую для извлечения/вытягивания через "немые" протоколы.
  • SSH: git clone ssh://example.com/srv/git/repo или git clone example.com:/srv/git/repo. Вам нужно настроить SSH-сервер (демон SSH) и установить SSH на клиенте (например, PuTTY в MS Windows).
  • git протокол: git clone git://example.com/repo. Вам нужно запустить git-daemon на сервере; Подробности см. в документации (вы можете запускать его как отдельный процесс только для извлечения, а не для запуска в качестве сервиса). git -daemon является частью git.
  • bundle: вы создаете пакет на сервере с помощью git-bundle, передайте его на клиентскую машину любым способом (даже через USB) и клонируйте с помощью git clone file.bndl (если клон не работает, вы можете сделать "git init", "git remote add" и "git fetch" ).

Что вам не хватает в вашем примере, вероятно, работает git -daemon на сервере. Это или неправильная настройка git -demon.

К сожалению, я не могу помочь вам запустить git -daemon как службу в MS Windows. Однако в последней версии msysGit ничего не говорится о git -demon, но не работает.

Ответ 2

В дополнение к ответам Якуба Нарбского, есть еще одно, больше в соответствии с вашим первоначальным вопросом. Вы можете клонировать из github, как обычно, тогда, когда вы хотите выполнить одноразовое вытягивание из своего локального репо, просто выполните следующее:

git pull /path/to/repo master

(вместо мастера вы можете поместить любое имя ветки.)

Ответ 3

Маршрут ssh работает хорошо, но требует удаленного ssh-сервера. Если у вас платформа Windows, Cygwin предоставляет рабочий сервер ssh, который работает с Git, но обновляет вручную Git, если использовать Cygwin Git (я написал несколько советов http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin/).

Ответ 4

Недавно я изменил один из моих проектов git, чтобы реплицировать себя на HTTP-сервер, используя sitecopy для фактической загрузки файлов.

Это довольно просто, просто используйте git update-server-info, затем зеркалируйте каталог .git в какой-то http-доступный каталог на вашем сервере. Я использовал 'project.git', что довольно распространено.

Git pull from http://site/project-git работает как чемпион, и мне не нужно ничего иметь на сервере, кроме FTP доступ, хотя sitecopy также поддерживает webdav.

Я не рекомендую использовать sitecopy, однако, так как он не поддерживает синхронизацию нескольких машин. Для моего проекта репозиторий HTTP доступен только для чтения, а обновление золота происходит только с одной машины, поэтому оно работает достаточно хорошо.

Ответ 5

Если у вас есть путь, например

C:\Project\

и вы уже сделали git init, поэтому у вас также есть папка

C:\Project\.git\

Теперь вы создаете новую папку

C:\.git\

Перейдите в эту папку и запустите git clone --bare ..\Project (Голый),
вернитесь в свою папку C:\Project\ и выполните git remote add-url local ..\.git\Project.
Теперь вы просто делаете git add -A, git commit -m "HelloWorld" и git push local master.

Вы можете поделиться папкой Project, подключить ее к Z: и сделать git clone Z:\Project - теперь вы можете использовать git pull origin master и git push origin master для перемещения/переноса изменений с одного компьютера на другой.

Ответ 6

Если ваш удаленный хост находится в той же сети Windows, то есть вы можете получить к нему доступ как \remotehost, то вы можете сопоставить сетевой диск в проводнике, скажем z: → \remotehost\repodir, после этого вы можете использовать 'git clone/z/myproject' для клонирования проекта