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

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

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

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

Я использую Windows 7 x64 RC, у меня установлены MSysGit и TortoiseGit, и я открыл порт Git по умолчанию (9814) на брандмауэре. Пожалуйста, предположите, что рабочая копия репо находится на 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)

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

Ответы [ 6 ]

121 голосов
/ 11 июня 2009

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

  • локальная файловая система : git clone /path/to/repo или git clone file://path/to/repo. Наименее работа, если у вас есть сетевая файловая система, но не очень эффективное использование сети (Это почти точно решение, предложенное Йоаким Элофссон )
  • 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 : вы генерируете bundle на сервере с помощью команды git-bundle , переносите его на клиентский компьютер любым способом (даже через USB) и клонируете с помощью git clone file.bndl ( если клон не работает, вы можете сделать «git init», «git remote add» и «git fetch»).

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

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

16 голосов
/ 11 июня 2009

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

git pull /path/to/repo master

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

1 голос
/ 11 ноября 2015

Если у вас есть путь как

C:\Project\

и вы уже git init, так что у вас также есть папка

C:\Project\.git\

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

C:\.git\

Зайдите в эту папку и запустите git clone --bare ..\Project ( bare важно),
вернитесь в папку 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 для передачи / переноса изменений с одного компьютера на другой.

1 голос
/ 15 июня 2009

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

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

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

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

1 голос
/ 13 июня 2009

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

0 голосов
/ 31 октября 2011

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

...