Git клон через ssh
У меня есть проект, на котором я создал репозиторий git:
$ cd myproject
$ git init
$ git add .
$ git commit
Я хотел создать голый клон на другой машине:
$ cd ..
$ git clone --bare myproject ssh://[email protected]:/GitRepos/myproject.git
Я выполнил клон, но не напечатал никакого ответа.
Я вошел в систему на сервере и попытался посмотреть, как хранятся файлы. Путь /GitRepos был пуст, поэтому я решил снова сделать клон:
$ git clone --bare myproject ssh://[email protected]:/GitRepos/myproject.git
На этот раз ответ был:
fatal: путь назначения 'ssh://user @server:/GitRepos/myproject.git' уже существует и не является пустым каталогом.
Но я видел, что путь пуст.
Что здесь происходит?
Ответы
Ответ 1
Это, возможно, не связано непосредственно с вопросом; но одна ошибка, которую я только что сделал сам, и я вижу в OP, это спецификация URL ssh://[email protected]:/GitRepos/myproject.git
, а именно, у вас есть как двоеточие :
, так и косая черта /
после того, как он обозначает абсолютный путь.
Затем я нашел Git clone, ssh: Не удалось разрешить имя хоста - git, разработка - Nicolas Kuttler (так как это была ошибка, которую я получал, на git
версия 1.7.9.5), отметив:
Проблема с исходной командой, которую я использовал, состояла в том, что я попытался использовать синтаксис типа scp.
... это тоже была моя проблема! Итак, в основном в git
с ssh
, вы либо используете
-
ssh://[email protected]/absolute/path/to/repo.git/
- просто косая черта для абсолютного пути на сервере
-
[email protected]:relative/path/to/repo.git/
- только двоеточие (он не должен иметь ssh://
для относительного пути на сервере (относительно домашнего dir username
на сервере)
Надеюсь, это поможет кому-то,
Ура!
Ответ 2
Для репозиториев на GitHub попробуйте:
git clone ssh://[email protected]/<user>/<repository name>.git
Для настройки git для клонирования через ssh см.:
Ответ 3
Вам нужно запустить команду clone на том, что вы вызываете на сервере. Но я уверен, вы не используете ssh-сервер на своем локальном клиенте, чтобы он не работал. Предложите вам следовать этому подходу (проверьте руководство, потому что я делаю это из памяти)
- Войдите в серверную машину.
- Создайте голый репо с помощью
git init --bare
- На клиентской машине вы можете перенаправить свое репо на сервер.
git remote add origin ssh://[email protected]:/GitRepos/myproject.git
, за которым следует git push origin master
Ответ 4
Git 101:
git
- это децентрализованная система контроля версий. Вам не нужно, чтобы сервер вставал и работал с помощью git. Тем не менее, вы можете сделать это, поскольку это выглядит круто, не так ли? (Это также полезно, если вы хотите работать с одним проектом с нескольких компьютеров.)
Итак, чтобы запустить "сервер", вам нужно запустить git init --bare <your_project>.git
, так как это создаст пустой репозиторий, который затем вы сможете импортировать на свои компьютеры, не забиваясь в конфигурационных файлах в директории .git
.
После этого вы можете клонировать репо на своих клиентах, так как оно должно работать, но я обнаружил, что некоторые клиенты (а именно git-gui
) не смогут клонировать полностью репозиторий. Чтобы обойти это, вам нужно запустить cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master
. (Обратите внимание, что вам может потребоваться настроить свое имя пользователя и адрес электронной почты для этой машины git, если вы этого еще не сделали. Фактические команды для запуска будут в сообщении об ошибке, которое вы получите, поэтому я просто опустил их. )
Итак, на этом этапе вы можете клонировать репозиторий на любую машину, просто запустив git clone <user>@<server>:<relative_path><your_project>.git
. (Как указывали другие, вам может потребоваться префикс с ssh://
, если вы используете абсолютный путь.) Предполагается, что вы уже можете войти с вашего клиента на сервер. (Вы также получите бонусные баллы за настройку конфигурационного файла и ключей для ssh
, если вы намереваетесь направить много материала на удаленный сервер.)
Некоторые релевантные ссылки:
Это в значительной степени говорит вам, что вам нужно знать.
И это для тех, кто знает основные работы git, но иногда забывает точный синтаксис.
Ответ 5
Upfront, мне немного недостает навыков GIT.
Это будет клонировать голый репозиторий на вашем компьютере, который содержит только папки в .git
, который является скрытым каталогом. выполните ls -al
, и вы должны увидеть .git
или cd .git
внутри вашего репозитория.
Можете ли вы добавить описание своих намерений, чтобы помочь кому-то с более GIT навыками? Что вы действительно хотите сделать не так, как вы планируете это делать?
Ответ 6
Я хочу попробовать ответ, включающий git -flow и три "точки" или прецеденты, центральный репозиторий git, локальную разработку и производственную машину. Это не очень хорошо протестировано.
Я даю невероятно конкретные команды. Вместо того, чтобы говорить <your folder>
, я скажу /root/git
. Единственное место, где я меняю исходную команду, - это заменить мое конкретное имя сервера на example.com
. Я объясню, что назначение папок - это значит, что вы можете настроить его соответствующим образом. Пожалуйста, дайте мне знать о какой-либо путанице, и я обновлю ответ.
Версия git на сервере - 1.7.1. Сервер CentOS 6.3 (Final).
Версия git на машине разработки - 1.8.1.1. Это Mac OS X 10.8.4.
Центральный репозиторий и производственная машина находятся на одной машине.
центральный репозиторий, с которым пользователи svn могут быть связаны как "сервер", настроен следующим образом. У меня есть папка /root/git
, где хранятся все мои репозитории git. Я хочу создать репозиторий git для проекта, который я называю "цветами".
cd /root/git
git clone --bare flowers flowers.git
Команда git выдала два сообщения:
Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.
Ни о чем не беспокоиться.
На машине разработки сконфигурировано следующим образом. У меня есть папка /home/kinjal/Sites
, где я помещаю все свои проекты. Теперь я хочу получить центральный репозиторий git.
cd /home/kinjal/Sites
git clone [email protected]:/root/git/flowers.git
Это приводит меня к тому моменту, когда я могу начать добавлять к нему материал. Я сначала настроил git поток
git flow init -d
По умолчанию это находится на ветке develop
. Теперь я добавляю свой код. Затем мне нужно зафиксировать центральный репозиторий git.
git add .
git commit -am 'initial'
git push
В этот момент он подтолкнул к ветке развития. Я хочу также добавить это в главную ветку.
git flow release start v0.0.0 develop
git flow release finish v0.0.0
git push
Обратите внимание, что я ничего не сделал между началом выпуска и выпуском релиза. И когда я закончил выпуск, мне предложили отредактировать два файла. Это подтолкнуло ветвь разработки к управлению.
На рабочей площадке, которая находится на том же компьютере, что и мой центральный репозиторий git, я хочу разместить репозиторий в /var/www/vhosts/example.net
. У меня уже есть /var/www/vhosts
.
cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net
Если производственная машина также будет находиться на другой машине, команда git clone
будет похожа на команду, используемую на машине разработки.
Ответ 7
Отказ от ответственности: это просто копия комментария от bobbaluba, сделанного более заметным для будущих посетителей. Это помогло мне больше, чем любой другой ответ.
Вы должны удалить префикс ssh://
при использовании git clone
в качестве примера
git clone [email protected]:owner/repo.git
Ответ 8
Я сделал: git clone --bare "/GITREPOSITORIES/RepoA" "ssh://luc @EERSTENASDS119J/volume1/RepoA" Результат: fatal: путь назначения 'ssh://luc @EERSTENASDS119J/volume1/RepoA' уже существует и существует не пустой каталог.
Система создала каталог ssh://luc @EERSTENASDS119J/volume1/RepoA в моем текущем пути.
Так что git clone не интерпретировал спецификацию URL. Использовал обходной путь Алек.