мерзавец клон через ssh - PullRequest
198 голосов
/ 29 мая 2011

У меня есть проект, для которого я создал репозиторий git:

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

Я хотел создать пустой клон на другой машине:

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

Я выполнил клон, ноне печатал ни одного ответа.Я вошел на сервер и попытался посмотреть, как хранятся файлы.Путь / GitRepos был пуст, поэтому я решил снова выполнить клон:

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

На этот раз ответ был:

fatal: путь назначения 'ssh: // user@server: /GitRepos/myproject.git 'уже существует и не является пустым каталогом.

Но я увидел, что путь был пуст.
Что здесь происходит?

Ответы [ 9 ]

194 голосов
/ 21 апреля 2013

Возможно, это не связано напрямую с вопросом; но одна ошибка, которую я только что сделал сам и вижу в ОП, - это спецификация URL ssh://user@server:/GitRepos/myproject.git, а именно: у вас есть двоеточие : и косая черта / после него, обозначающие абсолютный путь.

Затем я нашел Git clone, ssh: Не удалось разрешить имя хоста - git, development - Nicolas Kuttler (поскольку это была ошибка, которую я получал, на git версии 1.7.9.5), отметив:

Проблема с командой, которую я использовал изначально, заключалась в том, что я пытался использовать подобный scp синтаксис.

... что также было моей проблемой! Таким образом, в основном в git с ssh вы либо используете

  • ssh://username@host.xz/absolute/path/to/repo.git/ - просто косая черта для абсолютного пути на сервере
  • username@host.xz:relative/path/to/repo.git/ - просто двоеточие (не должно быть ssh:// для относительного пути на сервере (относительно домашнего каталога username на сервере)

Надеюсь, это кому-нибудь поможет,
Ура!

115 голосов
/ 07 июня 2014

Для репозиториев на GitHub попробуйте:

git clone ssh://git@github.com/<user>/<repository name>.git

Для настройки git для клонирования через ssh см .:

42 голосов
/ 29 мая 2011

Вам нужно запустить команду clone на том, что вы называете сервером.Но держу пари, что вы не используете ssh-сервер на локальном клиенте, так что он все равно не будет работать.Предложите вам следовать этому подходу (проверьте руководство, потому что я делаю это из памяти)

  1. Войдите на сервер.
  2. Создайте голое репо, используя git init --bare
  3. На клиентской машине вы можете перенести репо на сервер.git remote add origin ssh://user@server:/GitRepos/myproject.git с последующим git push origin master
4 голосов
/ 27 февраля 2014

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, но иногда забывает точный синтаксис.

2 голосов
/ 08 ноября 2018

Отказ от ответственности: Это просто копия комментария bobbaluba , сделанного более заметным для будущих посетителей. Это помогло мне больше, чем любой другой ответ.


Вы должны отбросить префикс ssh:// при использовании git clone в качестве примера

git clone git@github.com:owner/repo.git
2 голосов
/ 13 июля 2013

Я хочу попробовать ответ, который включает в себя git-flow и три «точки» или сценарии использования, центральный репозиторий git, локальную разработку и рабочую машину. Это не очень хорошо проверено .

Я даю невероятно конкретные команды. Вместо того, чтобы говорить <your folder>, я скажу /root/git. Единственное место, где я меняю исходную команду, - это замена моего конкретного имени сервера на example.com. Я объясню назначение папок, чтобы вы могли настроить его соответствующим образом. Пожалуйста, дайте мне знать о любой путанице, и я обновлю ответ.

Версия git на сервере 1.7.1. Сервер CentOS 6.3 (финальный).

Версия git на компьютере разработчика - 1.8.1.1. Это Mac OS X 10.8.4.

Центральный репозиторий и производственный компьютер находятся на одном компьютере.

Центральный репозиторий, который пользователи svn могут относить как «сервер», настроен следующим образом У меня есть папка /root/git, где я храню все свои репозитории git. Я хочу создать git-репозиторий для проекта, который я называю 'flowers'.

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 root@example.net:/root/git/flowers.git

Это подводит меня к точке, с которой я могу начинать добавлять вещи к этому. Я сначала настроил git flow

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 будет выглядеть так же, как и на компьютере разработчика.

2 голосов
/ 29 мая 2011

Заранее, мне немного не хватает моих навыков GIT.

Это собирается клонировать пустой репозиторий на вашем компьютере, который содержит только папки в пределах .git, чтоскрытый каталог.выполните ls -al, и вы должны увидеть .git или cd .git в своем хранилище.

Можете ли вы добавить описание своего намерения, чтобы кто-то с большими навыками GIT мог помочь?Что ты действительно хочешь делать, а не как ты планируешь это делать?

0 голосов
/ 10 июня 2019

git clone git @ server: Пример / proyect.git

0 голосов
/ 09 января 2019

Я сделал: git clone --bare "/ GITREPOSITORIES / RepoA" "ssh: // luc @ EERSTENASDS119J / volume1 / RepoA" Результат: фатальный: путь назначения 'ssh: // luc @ EERSTENASDS119J / volume1 / RepoA' ужесуществует и не является пустым каталогом.

Система создала каталог ssh: // luc @ EERSTENASDS119J / volume1 / RepoA в моем текущем пути.

Таким образом, git clone не интерпретировал спецификацию URL,Использовал обходной путь Алек.

...