Как я могу пушить / тянуть между репозиториями git, когда оба находятся за брандмауэрами / NAT / ...? - PullRequest
3 голосов
/ 12 июля 2010

Я заинтригован мерзавцем.За последние десятилетия я использовал почти всех обычных игроков.В настоящее время на SVN и не очень счастлив.

Я думаю, что понимаю основы, но я не понимаю одно ключевое понятие о распределенной природе: как пользователь в своем доме общается с моим компьютером(отдельные дома, интернет-провайдеры и т. д.), когда у нас обоих есть динамические IP-адреса от наших интернет-провайдеров, и мы используем хотя бы один уровень брандмауэра / NAT для сокрытия адреса локальной сети от мира.

Это не такесли есть полезная запись DNS, указывающая на другой хост / ПК / ноутбук.И большинство (все?) Интернет-провайдеров не дают понять, как вы вообще открываете порты (конечно, я могу сделать это у себя дома, но что делать, когда я в гостиничном номере?)

Любойвысоко ценится указатель на ответ на этот FAQ.

Ответы [ 5 ]

2 голосов
/ 12 июля 2010

Это не мерзкий вопрос как таковой. Если вы размещаете, скажем, хранилище Subversion на своем ноутбуке, другие разработчики по-прежнему будут иметь проблемы с ним, пока вы находитесь в гостиничном номере. Вам нужно будет сделать свои репозитории доступными путем туннелирования через другие протоколы или передачи их на взаимно доступные ресурсы.

Худший, но все еще работоспособный случай - когда репозитории не могут напрямую общаться друг с другом, но вы можете отправлять патчи друг другу по электронной почте с помощью git send-email.

Далее по лестнице, скажем, у вас есть учетная запись оболочки с интернет-провайдером, который также предоставляет ~/public_html. В этом случае вы создадите в этом веб-пространстве пустой репозиторий, как описано в Настройка репозитория git, который можно вставлять и извлекать из HTTP (S) . Ваши запросы будут проходить проверку подлинности через SSH, а ваши соавторы настроят удаленные устройства для получения доступа с соответствующего HTTP-URL.

Это немного лучше, чем электронная почта, но медленный и грубый. Теперь у git есть преимущество интеллектуального бэкэнда HTTP , где перетаскивание через HTTP выполняется намного быстрее. С помощью умного или тупого бэкэнда вы можете включить аутентификацию.

Если вы не заботитесь об аутентификации, вы также можете обслужить свой репозиторий с помощью git daemon с хоста, к которому может подключиться каждый.

Если у вас обоих есть доступ к оболочке к одному и тому же хосту, вы можете обменяться работой сразу после подключения к этому блоку. У вас есть много вариантов здесь:

  • полный доступ к оболочке: та же учетная запись, тот же (централизованный) репо
  • полный доступ к оболочке: разные учетные записи, отдельные репозитории, git pull
  • разрешить соавторам git-only доступ к вашей учетной записи оболочки
  • (и т. Д.)

Вышеперечисленное может сработать в крайнем случае, но весь ручной уход и кормление станут утомительными. Передайте эту головную боль GitHub или Gitorious .

1 голос
/ 12 июля 2010

Вы оба общаетесь с центральным сервером (например, GitHub), используя обычные исходящие HTTPS-запросы.

0 голосов
/ 12 июля 2010

Я предполагаю, что вы не оба в одной локальной частной сети, не так ли?

Вы можете попытаться настроить SSH-туннель и проталкивать / извлекать через SSH. Вы можете настроить ssh на использование нестандартного порта и экспортировать его на свой маршрутизатор. Вы можете использовать одну из бесплатных динамических служб DNS, например DynDNS .

Каждый из вас может создать бесплатную учетную запись на одном из общедоступных сайтов Git-хостинга , например GitHub , отправить свои изменения в него, когда вы будете готовы, а другой получит изменения из другой общедоступный репозиторий: для этого не нужно пробивать дыры в брандмауэре / портах экспорта в маршрутизаторе / NAT.

Изображение будет выглядеть аналогично этому рисунку из Глава 5.1 «Распределенные рабочие процессы» из Pro Git книга, только без благословенного репозитория и должности менеджера интеграции, и разработчики выбирают непосредственно из публичные репозитории друг друга:

лейтенант-схема http://progit.org/figures/ch5/18333fig0502-tn.png


Если ничего не помогло, вы всегда можете обменяться git bundle , используя любой канал: будь то вложения электронной почты или USB-диск.

0 голосов
/ 12 июля 2010

три решения:

  • центральный сервер (например, github)
  • VPN
  • IPv6 (teredo / miredo отлично работает для домашних установок) + dynDNS (очень малоделать бесплатные записи dynDNS AAAA, единственный, который я нашел, был majimoto.net)
0 голосов
/ 12 июля 2010

Создание автономного туннеля openvpn между ...

пример (без шифрования):

box one (сервер): виртуальный ip 10.10.11.5

openvpn --float  --ping 30 --ping-exit 300 --inactive 300 --mssfix 1400 --tun-mtu 1500 --mute-replay-warnings --dev tun --comp-lzo --port 3565 --ifconfig 10.10.11.5 10.10.11.6  --proto tcp-server

поле два (клиент): виртуальный IP-адрес 10.10.11.6

openvpn --remote dynamic_ip_of_server_or_no_ip_hostname --float  --ping 30 --ping-exit 300 --inactive 300 --mssfix 1400 --tun-mtu 1500 --mute-replay-warnings --dev tun --comp-lzo --port 3565 --ifconfig 10.10.11.6 10.10.11.5  --proto tcp-client

затем выполните коммит на сервере через ssh ... или smbmount, или монтируйте NFS ...

...