如何让Git克隆到当前目录

时间:2012-03-25 22:39:15

标签: git git-clone

我在做:

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

我得到了:

  

致命:目的地路径'。'已经存在并且不是空的   。目录

我知道道路。已经存在。 我可以保证目录是空的。 (我在里面做,我什么也看不见!)

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

25 个答案:

答案 0 :(得分:436)

只需在它旁边放一个点

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

来自git help clone

  

只有在目录为空时才允许克隆到现有目录中。

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

答案 1 :(得分:325)

以下可能并不完全等同于所有情况下的克隆,但对我来说是诀窍:

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

就我而言,这会生成一个.git/config文件,该文件与我在克隆时获得的文件相同。

答案 2 :(得分:171)

@Andrew清楚地回答了here。但即使目录不为空,这也很简单:

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

答案 3 :(得分:59)

为了确保您可以克隆存储库,请转到任何临时目录并在那里克隆项目:

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

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

克隆完成后,您可以将此目录移动到任何位置:

mv project_hub /path/to/new/location

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

答案 4 :(得分:50)

git clone your-repo tmp && mv tmp/.git . && rm -rf tmp && git reset --hard

答案 5 :(得分:27)

ngOnInit() {

var user = JSON.parse(localStorage.getItem("user"));
console.log(user)
if(user!==null) {
  this.socket=io('http://localhost:4000',{query:"username="+user.nickname});
  this.getChatByRoom(user.room);
  this.msgData = { room: user.room, nickname: user.nickname, message: '',receiver:'group'  }
  this.joinned = true;
  this.scrollToBottom();
  this.getOnlineUsers();
  this.socket.on('new-message', function (data) {
    if(data.message.room === JSON.parse(localStorage.getItem("user")).room) {
      this.chats.push(data.message);
      this.msgData = { room: user.room, nickname: user.nickname, message: '' }
      this.scrollToBottom();
    }
  }.bind(this));

  this.socket.on('new-message-private',function(data){
    console.log('private new')
    console.log(data);
  }.bind(this));
}

}

目录必须为空

答案 6 :(得分:13)

如果当前目录为空,那么这将起作用:

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

答案 7 :(得分:11)

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

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

使用

确保您当前的目录为空
ls -a

答案 8 :(得分:8)

解决方案: 在这种情况下,解决方案是使用dot, 所以:rm -rf .* && git clone ssh://user@host.com/home/user/private/repos/project_hub.git .

如果我们完全确定该目录为空,则可以省略

rm -rf .* &&

积分转到: @James McLaughlin发表评论如下。

答案 9 :(得分:7)

改善@ GoZoner的答案:

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

shopt命令取自this SO answer并更改Bash上'mv'命令的行为以包含dotfiles,您需要包含.git目录和任何其他隐藏文件。

另请注意,如果当前目录(。)为空,则只保证按原样运行,但只要克隆的repo中的所有文件都与当前目录中的文件名称相同,它就会起作用。 。如果你不关心当前目录中的内容,可以在'mv'命令中添加-f(强制)选项。

答案 10 :(得分:6)

我有同样的需要。在我的例子中,我有一个标准的Web文件夹,它是由Web服务器安装创建的。出于说明的目的,我们假设这是

/server/webroot

和webroot包含其他标准文件和文件夹。我的repo只有特定于站点的文件(html,javascript,CFML等)

我所要做的就是:

cd /server/webroot

git init

git pull [url to my repo.git]

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

  1. 在我的情况下,git pull将会失败并显示一条关于没有git文件的消息:
  2.   

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

    1. 如果 .git文件位于文件夹的父路径中的某个位置,则会在包含.git文件的父级中创建已撤销的存储库。这发生在我身上,我对此感到惊讶; - )
    2. 这不会干扰我在webroot文件夹中的任何“标准”文件,但我确实需要将它们添加到.gitignore文件中,以防止无意中将它们添加到后续提交中。

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

答案 11 :(得分:4)

我用它来将存储库克隆到当前目录,该目录不为空。不一定是清洁的生活,但它是放在一个可丢弃的Docker容器中:

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

在这里,我使用cp -r而不是mv,因为那样会复制隐藏的文件和目录。然后使用rm -rf

处置临时目录

答案 12 :(得分:2)

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

答案 13 :(得分:1)

在命令末尾使用。(点),如下所示

git clone 网址

答案 14 :(得分:1)

对@phatblat的answer的进一步改进:

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

作为一个班轮:

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

答案 15 :(得分:1)

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

答案 16 :(得分:0)

使用

删除
  

rm -rf。*

可能会让您遇到麻烦或更多错误。

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

  

rm -rf / path / to / folder / *

答案 17 :(得分:0)

mkdir filename创建新文件非常有用,然后运行git clone xxxxx命令,它可以在我的计算机上运行

答案 18 :(得分:0)

这是我发现的:

我明白这一点:

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

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

https://couchpota.to/forum/viewtopic.php?t=3943

寻找克林顿的参赛作品。哈尔...... 如果你尝试这个(就像我一样),你可能会得到access denied响应,有我的第一个线索,所以最初的错误(对我而言)实际上是在解决错误的根问题。

在Windows中解决此问题: 确保您运行cmdgit elevated,然后运行:

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

以上是我的问题,只是提升为我工作。

答案 19 :(得分:0)

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

答案 20 :(得分:0)

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

答案 21 :(得分:0)

只需删除(或移动)给定目录的内容,包括.git目录。
诸如Android Studio的Rebuild之类的自动化工具将为您解决问题。

更多详细信息:
对我显示的错误是由于jarresolver git repo
显示的路径为temp\jarresolver\

我刚刚删除了temp\jarresolver\目录的内容,包括隐藏的.git目录。

仅此而已,全部工作,无需克隆。
当我做Rebuild时,Android studio克隆自身并构建成功。

答案 22 :(得分:0)

嗯...使用$(pwd)指定绝对电流路径对我有用。

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

git版本: 2.21.0

答案 23 :(得分:-2)

如果repo是私有的 首先添加您的ssh密钥 use =&gt; git clone git@github.com:yourusername / yourrepo.git 其他 use =&gt; git clone https://github.com/yourusername/yourrepo.git

答案 24 :(得分:-3)

我已经多次看过这个问题了 - 我只想指出你目录中的git pull可以解决这个问题。

除非我在这里遗漏了一些东西 - 这对我有用。