Як я можу зробити свій локальний репозиторій доступним для 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' з вашого buildmachine? Не найкращий / найефективніший спосіб, але найпростіший спосіб зробити.
Йоаким Елофссон,

Відповіді:


133

Існує п’ять можливостей для створення сховища для витягування з:

  • локальна файлова система : 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.
  • пакет : Ви генеруєте пакет на сервері за допомогою команди 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.

Однак я не рекомендую використовувати веб-копію, оскільки вона не підтримує синхронізацію декількох машин. Для мого проекту сховище 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.