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


89

У меня есть репозиторий рабочих копий, с которым я работал без проблем; происхождение этого репозитория находится на 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)

Я что-то упускаю?


Разве вы не можете просто настроить общий ресурс локально, а затем выполнить «git clone \\ workmachine \ share» со своей машины сборки? Не лучший / самый эффективный способ, но самый простой способ сделать.
Joakim Elofsson

Ответы:


134

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

  • локальная файловая система : 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 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-daemon.

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


Хорошо, поэтому мне нужно каждый раз устанавливать что-то или копировать его поверх пакета вручную (я полагаю, возможно, написав его через скрипт. Нужен ли для первых трех вариантов также git-daemon?)
alastairs,

1
Только опция "git protocol" требует запуска git-daemon на сервере. Только для параметров «SSH» и «HTTP» требуются дополнительные инструменты: либо sshd (ssh-сервер), либо веб-сервер. Пакетное решение - это ручное решение.
Якуб Наребски

Хотя вопрос был о «вытягивании», необходимо предупредить автора, чтобы он не запускал «git push» впоследствии, поскольку репозиторий, из которого он клонирует, не является пустым.
yhager

Не могли бы вы подробнее рассказать об этом, @yhager?
alastairs,

1
Примечание для всех, кто пробует опцию локальной файловой системы: не забывайте избегать начальных обратных косых черт в пути UNC! :-)
alastairs

17

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

git pull /path/to/repo master

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


Небольшой совет (или как я дошел до этого вопроса): ..в <path / to / repo> не работают; вместо этого используйте полный путь.
Дмитрий Тимофеев

1

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


1

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

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

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

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


1

Если у вас есть путь вроде

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изменения с одного компьютера на другой.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.