如何让Git克隆到当前目录

我在做:

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

我得到:

致命:目标路径'。’已经存在,不是空的 目录。< / p >

我知道路径。已经存在。 我可以保证这个目录是空的。(我在里面做了ls,我什么都没看到!)

为了将该项目克隆到当前目录,我在这里遗漏了什么?

617369 次浏览

为了确保你可以克隆这个repo,转到任何临时目录并在那里克隆项目:

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

这将把你的东西克隆到project_hub目录中。

一旦克隆完成,你可以把这个目录移动到任何你想要的地方:

mv project_hub /path/to/new/location

这是安全的,不需要任何神奇的东西。

如果当前目录是空的,那么这将工作:

git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo

改进@GoZoner的回答:

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

shopt命令取自这个SO答案,它将Bash上'mv'命令的行为更改为包含dotfiles,您需要包含.git目录和任何其他隐藏文件。

还要注意,只有在当前目录(.)为空的情况下,这才保证正常工作,但只要克隆的repo中没有任何文件与当前目录中的文件具有相同的名称,它就可以正常工作。如果你不关心当前目录中有什么,你可以在'mv'命令中添加-f (force)选项。

git clone your-repo tmp && mv tmp/.git . && rm -rf tmp && git reset --hard
解决方案是使用dot, 所以:< / p >
rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .`

如果绝对确定目录为空,则可以省略rm -rf .* &&

学分: @James McLaughlin评论

以下内容可能并不完全等同于克隆游戏,但对我来说却很管用:

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

在我的例子中,这将生成一个.git/config文件,该文件与我在进行克隆时得到的文件相同。

只要在旁边加个点就可以了

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

从# EYZ0:

仅当现有目录为空时才允许克隆到该目录。

因此,确保目录为空(使用ls -a检查),否则命令将失败。

除了@StephaneDelcroix的回答,在使用之前:

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

通过使用,确保当前目录为空

ls -a

以下是我的发现:

我看到了这个:

fatal: destination path 'CouchPotatoServer' already exists and is not an empty directory.

在我的搜索中,我偶然发现:

< a href = " https://couchpota.to/forum/viewtopic.php?t = 3943 " rel = " nofollow”> https://couchpota.to/forum/viewtopic.php?t = 3943 < / >

查找Clinton.Hall的条目… 如果你尝试这样做(就像我做的那样),你可能会得到access denied响应,这是我的第一个线索,所以最初的错误(对我来说),实际上是逃避到错误的根本问题 在windows中解决此问题: 确保你运行cmdgit elevated,然后运行:

git clone https://github.com/RuudBurger/CouchPotatoServer.git

以上就是我的问题,简单地提升对我来说很有效。

@Andrew已经回答清楚了在这里。但是,即使目录不是空的,也可以像这样简单:

git init .
git remote add origin <repository-url>
git pull origin master

在命令末尾使用.,如下所示

git clone URL .

删除与

Rm -rf .*

可能会给你带来麻烦或者更多的错误。

如果你有/path/to/文件夹,并且想要删除其中的所有内容,但不删除该文件夹,只需运行:

Rm -rf /path/to/folder/* .使用实例

shopt -s dotglob
git clone ssh://user@host.com/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp

我也有同样的需求。在我的案例中,我有一个标准的web文件夹,由web服务器安装创建。为了说明问题,我们设这是

# EYZ0

webroot还包含其他标准文件和文件夹。我的回购只是有网站特定的文件(html, javascript, CFML等)

我所要做的就是

cd /server/webroot


git init


git pull [url to my repo.git]

你需要小心在目标文件夹中初始化git,因为如果你不这样做,会发生以下两种情况之一:

  1. 在我的例子中,git拉将简单地失败,并提示没有git文件:

致命:不是一个git存储库(或任何父目录):.git

  1. 如果在你文件夹的父路径中有一个 .git文件,你的回收将在那个包含。git文件的父路径中创建。这件事发生在我身上,我很惊讶;-)

这并没有打扰我在我的webroot文件夹中的任何“标准”文件,但我确实需要将它们添加到.gitignore文件中,以防止他们无意中添加到后续的提交。

这似乎是一种“克隆”到非空目录的简单方法。如果你不想要由pull创建的.git和.gitignore文件,只需在pull之后删除它们。

通过mkdir filename创建一个新的项目目录,然后运行git clone xxxxx命令,并移动文件,这是很有用的

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

目录必须为

所以我通过删除根目录中隐藏的.git文件夹,然后在根/dist文件夹中的'git clone repo .'中添加句点来修复这个相同的错误。这是vue-cli webpack项目的上下文。所以其他人说的都是对的,这通常意味着你在你想要克隆的文件夹或父文件夹或根文件夹中有git跟踪!

Windows的解决方案是将存储库克隆到其他文件夹,然后复制粘贴到原始位置,或者只是复制.git不可见文件夹。

进一步完善@phatblat的回答:

git clone --no-checkout <repository> tmp \
&& mv tmp/.git . \
&& rmdir tmp \
&& git checkout master

作为一行:

# EYZ0

使用$(pwd)指定绝对当前路径对我来说很有用。

git clone https://github.com/me/myproject.git $(pwd)

# EYZ0 2.21.0

需要空目录,根据票证说明。


更新2022:你现在可以使用.

即。

git clone https://github.com/me/myproject.git .

# EYZ0 2.36.1

git clone ssh://user@host.com/home/user/private/repos/project_hub.git $(pwd)

我用它将一个repo复制到当前目录,当前目录不是空的。不一定是干净的生活,但它是在一个一次性的码头集装箱里:

git clone https://github.com/myself/myRepo.git temp
cp -r temp/* .
rm -rf temp

这里,我使用了cp -r而不是mv,因为这样可以复制隐藏的文件和目录。然后用rm -rf释放临时目录