Как я могу сделать свой локальный репозиторий доступным для 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' для клонирования проекта