Как заставить Git клонировать в текущий каталог - PullRequest
424 голосов
/ 26 марта 2012

Я делаю:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./

Я получаю:

Фатально: путь назначения '.'уже существует и не является пустым каталогом.

Я знаю путь.уже существует.И я могу заверить, что каталог пуст.(Я делаю ls внутри и ничего не вижу!)

Чего мне здесь не хватает для клонирования этого проекта в текущий каталог?

Ответы [ 23 ]

445 голосов
/ 08 октября 2013

просто поставьте точку рядом с ней

git clone git@github.com:user/my-project.git .

С git help clone:

Клонирование в существующий каталог допускается только в том случае, если каталог пуст.

Поэтому убедитесь, что каталог пуст (проверьте с помощью ls -a), в противном случае команда не будет выполнена.

328 голосов
/ 29 мая 2013

Следующее, вероятно, не полностью эквивалентно клону во всех случаях, но сделало для меня хитрость:

git init .
git remote add -t \* -f origin <repository-url>
git checkout master

В моем случае это создает файл .git/config, который эквивалентен тому, который яполучить при выполнении клона.

177 голосов
/ 13 ноября 2015

@ Андрей четко ответил здесь .Но так же просто, как это работает, даже если каталог не пустой:

git init .
git remote add origin <repository-url>
git pull origin master
59 голосов
/ 26 марта 2012

Чтобы быть уверенным, что вы можете клонировать репо, перейдите во любой временный каталог и клонируйте проект там:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git

Это клонирует ваши вещи в каталог project_hub.

Когда клонирование закончится, вы можете переместить этот каталог куда хотите:

mv project_hub /path/to/new/location

Это безопасно и не требует никаких магических вещей вокруг.

51 голосов
/ 21 марта 2013
git clone your-repo tmp && mv tmp/.git . && rm -rf tmp && git reset --hard
29 голосов
/ 24 октября 2017

Do

git clone https://user@bitbucket.org/user/projectname.git .

Каталог должен быть пуст

13 голосов
/ 26 марта 2012

Если текущий каталог пуст, то это будет работать:

git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo
11 голосов
/ 20 февраля 2014

В дополнение к ответу @ StephaneDelcroix, перед использованием:

git clone git@github.com.user/my-project.git .

убедитесь, что ваш текущий каталог пуст, используя

ls -a
8 голосов
/ 12 апреля 2013

Решение: В этом случае решение использовало dot, итак: rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .

rm -rf .* && может быть опущено, если мы абсолютно уверены, что каталог пуст.

Кредиты идут на: @ Джеймс Маклафлин в комментариях ниже.

7 голосов
/ 03 января 2013

Улучшение ответа @ GoZoner:

git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo

Команда shopt взята из этого ответа SO и изменяет поведение команды 'mv' на Bash для включения файлов точек, которые вам понадобятся для включения каталога .git и любых других скрытых файлов. .

Также обратите внимание, что это гарантированно будет работать как есть, только если текущий каталог (.) Пуст, но он будет работать до тех пор, пока ни один из файлов в клонированном хранилище не будет иметь того же имени, что и файлы в текущем каталоге. , Если вам все равно, что находится в текущем каталоге, вы можете добавить опцию -f (force) к команде 'mv'.

...