我在foo中设置了一个git repo
cd
mkdir foo
cd foo
git init
现在我想远程引用
git clone git+ssh://me@somemachine/home/me/foo.git
fatal: git remote error '/home/me/foo.git' does not appear to be a git repository
所以我把.git关闭然后就可以了。但是我看到的几乎所有例子最后都有“.git”。那“.git”是什么意思?
另外,ssh:// ...和git + ssh:// ...之间有什么区别(在意义和实际意义上)
答案 0 :(得分:11)
.git
只是一种命名约定,通常意味着该文件夹是服务器而不是客户端。我相信它是由存储库裸露或不存在确定的(裸存储库没有工作目录)。克隆URL只指向一个文件夹,如果实际文件夹末尾有.git,则添加它。否则,不要。
实际上,他们几乎是一样的。在意义上,他们使用不同的协议连接到服务器。 ssh://
打开与具有特定用户的服务器的SSH连接,并在服务器上运行git命令(通常服务器将通过将用户的shell设置为/usr/bin/git-shell
来限制命令)。 git+ssh://
表示服务器在本地运行git daemon
,客户端需要首先打开SSH连接以与守护进程交互。
答案 1 :(得分:6)
这是一种常见的(但肯定不是通用的)约定,即在名称以.git
结尾的目录中创建裸git存储库。这就是您经常在存储库URL末尾看到.git
的原因。
我不确定git+ssh
方案 - 实际上我在git手册页中找不到对它的引用。根据{{3}},协议已被删除,有利于普通的ssh
。 (Eclipse论坛当然不是关于git的官方信息来源,但这是有道理的。我从来不知道应该是什么区别。)
答案 2 :(得分:2)
.git
后缀只是表示所讨论的目录是一个裸git存储库(即没有工作副本的存储库)。实际上并不是必需的。
至于git+ssh://
,根据the git-fetch manpage,不允许:
Git本身支持ssh,git,http,https,ftp,ftps和rsync协议。可以使用以下语法:
- SSH:// [用户@] host.xz [:端口] /path/to/repo.git/
- GIT中://host.xz [:端口] /path/to/repo.git/
- HTTP [S]://host.xz [:端口] /path/to/repo.git/
- FTP [S]://host.xz [:端口] /path/to/repo.git/
的rsync://host.xz/path/to/repo.git/
类似scp的语法也可以与ssh协议一起使用:>
- [用户@] host.xz:路径/到/ repo.git /
答案 3 :(得分:1)
.git没有特殊含义,你需要添加它的天气取决于repo在服务器端的位置,有或没有.git。
有时候.git的回购意味着它是一个简单的回购。