У меня есть локальный репозиторий Git. Я хотел бы сделать его доступным на удаленном сервере с поддержкой ssh. Как мне это сделать?
git
installation
Захваты
источник
источник
git push origin master
произойдет сбой с ошибкой «хранилище не найдено», попробуйтеgit update-server-info
на удаленной стороне, где вы это сделалиgit init --bare
git update-server-info
но я получаю ошибкуfatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Для первоначальной настройки любого сервера Git вы должны экспортировать существующее хранилище в новое пустое хранилище - хранилище, которое не содержит рабочего каталога. Это обычно просто сделать. Чтобы клонировать ваш репозиторий для создания нового чистого репозитория, вы запускаете команду clone с
--bare
опцией. По соглашению голые каталоги репозитория заканчиваются.git
следующим образом:Эта команда берет Git-репозиторий самостоятельно, без рабочего каталога, и создает каталог специально для него.
Теперь, когда у вас есть чистая копия вашего хранилища, все, что вам нужно сделать, это поместить ее на сервер и настроить протоколы. Допустим, вы настроили сервер с именем, к
git.example.com
которому у вас есть доступ по SSH, и вы хотите хранить все свои репозитории Git в/opt/git
каталоге. Вы можете настроить свой новый репозиторий, скопировав свой пустой репозиторий поверх:На этом этапе другие пользователи, которые имеют доступ по SSH к тому же серверу, который имеет доступ для чтения к
/opt/git
каталогу, могут клонировать ваш репозиторий, запустивЕсли пользователь SSH подключается к серверу и имеет доступ на запись в
/opt/git/my_project.git
каталог, он также автоматически получит принудительный доступ. Git автоматически добавит права на групповую запись в хранилище, если вы запустите команду git init с--shared
опцией.Очень легко взять Git-репозиторий, создать пустую версию и поместить ее на сервер, к которому у вас и ваших сотрудников есть доступ по SSH. Теперь вы готовы сотрудничать в одном проекте.
источник
scp
Решение работает ИМО на практике лучше , чемinit --bare
. Тем не менее, он все еще чувствует себя как некрасивый хак: сначала локально клонировать, а затем скопировать на сервер ... если бы у git была команда сделать это за один раз.--shared
работал на меня. Интересно, что произойдет, если вы используете,git init --shared
не делая ни--bare
одного ...scp
это для удаленного будет работать лучше, если оно не поддерживаетgit init --bare
(как это было в случае с git 1.5.5, 2008). Я думаю, что это должно работать, даже если пульт не имеет мерзавца вообще.Примечание для людей, которые создали локальную копию в Windows и хотят создать соответствующий удаленный репозиторий в системе Unix-line, где текстовые файлы получают LF-окончания для последующих клонов разработчиками в Unix-подобных системах, но CRLF-окончания в Windows.
Если вы создали свой репозиторий Windows до настройки перевода строки, у вас возникла проблема. По умолчанию в Git нет перевода, поэтому ваш рабочий набор использует CRLF, но ваш репозиторий (то есть данные, хранящиеся в .git) также сохранил файлы как CRLF.
Когда вы нажимаете на пульт, сохраненные файлы копируются как есть, перевод строки не заканчивается. (Прекращение перевода строки происходит, когда файлы передаются в хранилище, а не при перемещении хранилищ). В итоге вы получите CRLF в своем Unix-подобном хранилище, а это не то, что вам нужно.
Чтобы получить LF в удаленном репозитории, вы должны сначала убедиться, что LF находится в локальном репозитории, путем повторной нормализации вашего репозитория Windows. . Это не окажет видимого влияния на ваш рабочий набор Windows, у которого все еще есть окончания CRLF, однако, когда вы нажимаете на удаленный, пульт получит LF правильно.
Я не уверен, есть ли простой способ узнать, какие окончания строк у вас есть в вашем репозитории Windows - я думаю, вы могли бы проверить это, установив core.autocrlf = false и затем клонировав (если репо имеет LF-окончания, клон будет иметь НЧ тоже).
источник
Существует интересная разница между двумя популярными решениями выше:
Если вы создаете пустой репозиторий, как это:
а потом
Затем git устанавливает конфигурацию в 'original_repo' с этим отношением:
с последним в качестве вышестоящего пульта. И у вышестоящего пульта нет других пультов в его конфигурации.
Однако, если вы делаете это наоборот:
затем «my_remote.git» завершается с его конфигурацией, имеющей «origin», указывающей назад на «original_repo» как удаленный, с remote.origin.url, эквивалентным пути к локальному каталогу, что может быть неуместно, если он будет перемещен на сервер.
Хотя от этой «удаленной» ссылки можно легко избавиться позже, если она не подходит, все же нужно установить «original_repo», чтобы указывать на «my_remote.git» в качестве удаленного по восходящему каналу (или куда бы он ни направлялся) чтобы поделиться с). Технически, вы можете достичь того же результата, сделав еще несколько шагов, используя подход №2. Но # 1 кажется более прямым подходом к созданию «центрального голого общего репо», исходящего из локального, подходящего для перехода на сервер, с меньшим количеством шагов. Я думаю, что это зависит от роли, которую вы хотите играть в удаленном репо. (И да, это противоречит документации здесь .)
Предостережение: я узнал вышеизложенное (на момент написания этой статьи в начале августа 2019 года), выполнив тест на моей локальной системе с реальным репо, а затем выполняя сравнение результатов между файлами. Но! Я все еще учусь, так что может быть более правильный путь. Но мои тесты помогли мне сделать вывод, что # 1 - мой предпочтительный метод.
источник
Вы можете создать пустой git-репозиторий с помощью следующего кода:
Один из вариантов наличия удаленного git-репозитория - использование протокола SSH:
Для получения дополнительной информации, проверьте ссылку: Git на сервере - протоколы
источник
Вам необходимо создать каталог на удаленном сервере. Затем используйте команду "git init", чтобы установить его в качестве хранилища. Это должно быть сделано для каждого нового проекта (каждая новая папка)
Предполагая, что вы уже установили и использовали git с использованием ключей ssh, я написал небольшой скрипт на Python, который при запуске из рабочего каталога настроит удаленный сервер и инициализирует каталог как git-репо. Конечно, вам нужно будет отредактировать скрипт (только один раз), чтобы указать ему сервер и корневой путь для всех репозиториев.
Проверьте здесь - https://github.com/skbobade/ocgi
источник
Обычно вы можете настроить git-репо, просто используя
init
командуВ вашем случае уже есть репо на удаленном доступном. В зависимости от того, как вы получаете доступ к своему удаленному репо (с именем пользователя внутри URL или ключом ssh, который обрабатывает проверку), используйте только
clone
команду:Есть и другие способы клонирования репо. Таким образом, вы называете это, если у вас есть настроенный ssh-ключ на вашем компьютере, который проверяет наличие вашего хранилища. Существуют и другие комбинации URL, если вы хотите включить свой пароль и имя пользователя для входа в удаленный репозиторий.
источник