我在做:
git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./
我得到:
致命:目标路径'。’已经存在,不是空的 目录中。
我知道路。已经存在。 我可以保证这个目录是空的。(我在里面,我什么都看不到!)
为了将该项目克隆到当前目录,我在这里遗漏了什么?
我在做:
git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./
我得到:
致命:目标路径'。’已经存在,不是空的 目录中。
我知道路。已经存在。 我可以保证这个目录是空的。(我在里面,我什么都看不到!)
为了将该项目克隆到当前目录,我在这里遗漏了什么?
当前回答
解决方法是用圆点, 所以:
rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .`
Rm -rf .* &&可以省略,如果我们绝对确定目录是空的。
获奖者: @James McLaughlin评论
其他回答
改进@GoZoner的回答:
git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo
shopt命令取自这个SO答案,并将Bash上的'mv'命令的行为更改为包含dotfiles,您需要包括.git目录和任何其他隐藏文件。
还要注意,只有在当前目录(.)为空的情况下,这才保证正常工作,但只要克隆的repo中没有任何文件与当前目录中的文件具有相同的名称,它就可以正常工作。如果你不关心当前目录中有什么,你可以在'mv'命令中添加-f (force)选项。
@Andrew已经清楚地回答了这个问题。但是,即使目录不是空的,也可以像这样简单:
git init .
git remote add origin <repository-url>
git pull origin master
以下内容可能并不完全等同于克隆游戏,但对我来说却很管用:
git init .
git remote add -t \* -f origin <repository-url>
git checkout master
在我的例子中,这将生成一个.git/config文件,该文件与我在进行克隆时得到的文件相同。
shopt -s dotglob
git clone ssh://user@host.com/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp
如果当前目录是空的,那么这将工作:
git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo