Как создать удаленный Git-репозиторий из локального? - PullRequest
205 голосов
/ 11 июля 2011

У меня есть локальный репозиторий Git. Я хотел бы сделать его доступным на удаленном сервере с поддержкой ssh. Как мне это сделать?

Ответы [ 6 ]

250 голосов
/ 11 июля 2011

Я думаю, что вы создаете пустой репозиторий на удаленной стороне, git init --bare, добавляете удаленную сторону в качестве трекера push / pull для вашего локального репозитория (git remote add origin URL), а затем локально говорите git push origin master.Теперь любой другой репозиторий может pull из удаленного репозитория.

68 голосов
/ 08 января 2014

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

$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/

Эта команда сама берет Git-репозиторий без рабочего каталога и создает каталог специально для него.

Теперь, когда у вас есть чистая копия вашего репозитория, все, что вам нужно сделать, это поместить ее на сервер и настроить протоколы. Допустим, вы настроили сервер с именем git.example.com, к которому у вас есть доступ SSH, и вы хотите хранить все свои репозитории Git в каталоге /opt/git. Вы можете настроить свой новый репозиторий, скопировав свой пустой репозиторий:

$ scp -r my_project.git user@git.example.com:/opt/git

На этом этапе другие пользователи, которые имеют доступ по SSH к тому же серверу, который имеет доступ на чтение к каталогу /opt/git, могут клонировать ваш репозиторий, запустив

$ git clone user@git.example.com:/opt/git/my_project.git

Если пользователь SSH подключается к серверу и имеет доступ на запись в каталог /opt/git/my_project.git, он также автоматически получит принудительный доступ. Git автоматически добавит права на групповую запись в репозиторий, если вы запустите команду git init с опцией --shared.

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

Очень легко взять Git-репозиторий, создать пустую версию и поместить ее на сервер, к которому у вас и ваших сотрудников есть доступ по SSH. Теперь вы готовы сотрудничать в одном проекте.

8 голосов
/ 28 ноября 2012

Примечание для людей, которые создали локальную копию в Windows и хотят создать соответствующий удаленный репозиторий в системе Unix-line, где текстовые файлы получают LF-окончания для последующих клонов разработчиками в Unix-подобных системах, но CRLF-окончания на Окна.

Если вы создали свой репозиторий Windows до , настроив перевод строки , у вас возникла проблема. По умолчанию Git не переводит, поэтому ваш рабочий набор использует CRLF, но ваш репозиторий (то есть данные, хранящиеся в .git) также сохранил файлы как CRLF.

Когда вы нажимаете на пульте, сохраненные файлы копируются как есть, перевод строки не заканчивается. (Прекращение перевода строки происходит, когда файлы передаются в хранилище, а не когда они перемещаются). Вы получите CRLF в своем Unix-подобном репозитории, а это не то, что вам нужно.

Чтобы получить LF в удаленном репозитории, вы должны сначала убедиться, что LF находится в локальном репозитории, перенастроив свой репозиторий Windows . Это не окажет видимого влияния на ваш рабочий набор Windows, у которого все еще есть окончания CRLF, однако, когда вы нажимаете на удаленный, пульт получит LF правильно.

Я не уверен, есть ли простой способ узнать, какие окончания строк у вас есть в вашем репозитории Windows - я думаю, вы могли бы проверить это, установив core.autocrlf = false и затем клонировав (если репо имеет LF-окончания, у клона тоже будет НЧ).

2 голосов
/ 16 апреля 2018

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

Вы можете создать пустой git-репозиторий со следующим кодом:

$ git clone --bare /path/to/project project.git

Один из вариантов наличия удаленного git-репозитория - использование протокола SSH:

Общий транспортный протокол для Git, когда хостинг выполняется по SSH. Это связано с тем, что SSH-доступ к серверам уже установлен в большинстве места - и если это не так, это легко сделать. SSH также аутентифицированный сетевой протокол и, поскольку он вездесущ, он как правило, прост в настройке и использовании.

Чтобы клонировать Git-репозиторий через SSH, вы можете указать ssh:// URL как это:

$ git clone ssh://[user@]server/project.git

Или вы можете использовать более короткий scp-подобный синтаксис для протокола SSH:

$ git clone [user@]server:project.git

В обоих случаях выше, если вы не указали необязательное имя пользователя, Git предполагается, что вы вошли в систему как пользователь.

Плюсы

Плюсов использования SSH много. Во-первых, SSH относительно легко установить вверх - демоны SSH являются обычным явлением, у многих сетевых администраторов есть опыт с ними, и многие дистрибутивы ОС настроены с ними или имеют инструменты для управления ими. Далее доступ по SSH безопасен - все данные передача зашифрована и заверена. Наконец, как HTTPS, Git и Локальные протоколы, SSH эффективен, что делает данные такими же компактными, как возможно перед передачей.

Минусы

Негативным аспектом SSH является то, что он не поддерживает анонимный доступ в ваш репозиторий Git. Если вы используете SSH, люди должны иметь SSH доступ к вашей машине, даже в режиме только для чтения, который не сделать SSH благоприятным для проектов с открытым исходным кодом, для которых люди могут просто хотите клонировать свой репозиторий, чтобы изучить его. Если вы используете его только в вашей корпоративной сети SSH может быть единственным протоколом, который вы надо иметь дело с. Если вы хотите разрешить анонимный доступ только для чтения к ваши проекты, а также хотите использовать SSH, вам нужно настроить SSH для чтобы вас оттолкнули, но кое-что еще можно было получить за других.

Для получения дополнительной информации, проверьте ссылку: Git на сервере - протоколы

2 голосов
/ 22 января 2017

Вам необходимо создать каталог на удаленном сервере. Затем используйте команду "git init", чтобы установить его в качестве хранилища. Это должно быть сделано для каждого нового проекта (каждая новая папка)

Предполагая, что вы уже настроили и использовали git с использованием ключей ssh, я написал небольшой скрипт на Python, который при запуске из рабочего каталога настроит удаленный сервер и инициализирует каталог как git-репо. Конечно, вам нужно будет отредактировать скрипт (только один раз), чтобы указать ему сервер и корневой путь для всех репозиториев.

Проверьте здесь - https://github.com/skbobade/ocgi

0 голосов
/ 12 августа 2015

Обычно вы можете настроить git-репо, просто используя команду init

git init

В вашем случае на удаленном сервере уже есть репо. В зависимости от того, как вы получаете доступ к вашему удаленному репо (с именем пользователя внутри URL или ключом ssh, который обрабатывает проверку), используйте только команду clone:

git clone git@[my.url.com]:[git-repo-name].git

Есть и другие способы клонирования репо. Таким образом, вы называете это, если у вас есть настроенный ssh-ключ на вашем компьютере, который проверяет наличие вашего хранилища. Существуют и другие комбинации URL, если вы хотите включить свой пароль и имя пользователя для входа в удаленный репозиторий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...