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 на сервере)

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

Ответ 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. Использовал обходной путь Алек.