这个Git仓库URL中冒号的作用是什么?

16

请原谅我的无知,我是新手对Git不熟悉,在哪里寻找答案不太确定,但是在以下URL中(它指向我的mediatemple服务器上的git存储库),'example.com'后面的冒号有什么用途?

git remote add repo_name ssh://serveradmin%example.com@example.com:/home/45678/domains/git.example.com/html/example.git


2
看起来像是一个没有意义的冒号。通常端口号会紧随其后,但如果没有数字,则应使用SSH(22)的默认端口号。 - harpo
你的想法和我的一样,但这并不是毫无意义的。在许多 git URL 路径中都有冒号,并且我直接从 mediatemple 文档中复制了这个路径。它做的事情与通常的端口号指示器不同,我认为。如果我错了,请告诉我。 - David Rhoden
2
我喜欢不规范的URLs——显然,因为“%ex”不是有效的百分号转义,所以它是无效的。他们使用“://”但不遵循通用语法的部分仅仅是一个小烦恼,可能源于ssh user@host:path语法(其中路径是绝对或相对于您的主目录)。 - tc.
你确定“%”无效吗?我曾经使用过两个主机,在他们的登录说明中使用了“%”而不是“@”。 - David Rhoden
你可能已经找到了答案:'ssh user@host:path' 是标准的ssh语法吗?其他评论者已经建议过,它是特定的ssh语法。我会查找文档来确定是否如此。 - David Rhoden
3个回答

12

这个语法实际上是错误的,但它有点像在git URL中可以使用的scp风格语法,它将主机名与该主机上的路径分开。您可以在git clone文档中找到指定git URL的选项列表。在您的情况下,您可能想要使用以下其中之一:

 serveradmin%example.com@example.com:/home/45678/domains/git.example.com/html/example.git

... 或者:

 ssh://serveradmin%example.com@example.com/home/45678/domains/git.example.com/html/example.git
在任何情况下,用户名都是serveradmin%example.com,主机名是example.com,该主机上的路径为/home/45678/domains/git.example.com/html/example.git

等一下,语法错在哪里?你第一个例子看起来和我发的一样。假设我什么都不知道,告诉我更多关于“在Git URL中可以使用的类似scp风格的语法”--我不知道那是什么。如果你能指向文档,那会很有帮助。当我最初问到这些冒号时,我认为它与git特定或ssh特定的语法有关;我想我可能是对的,但到目前为止还没有明确的答案。(无论如何,感谢所有回答。) - David Rhoden
2
我的第一个示例没有以 ssh:// 开头,而你的有。在 不带 ssh:// 的版本中,只允许使用 :。关于可以用来引用 git 存储库的 URL 的唯一文档是我在答案中链接到的 git clone 手册。scp 是一个命令行工具,用于通过 SSH 复制文件,需要您指定远程系统上文件的位置为 user@host:filename。由于 scp 被广泛使用并为人所熟知,因此 git 允许您使用它来指定存储库以及严格的 URL 版本。 - Mark Longair
谢谢你的澄清。在使用 Git 之前,我从未使用过 scp,所以它对我来说并不熟悉;我很感激你的解释。我接受这个答案。 - David Rhoden

4

此处所述,它将主机名(服务器)与路径(到存储库)分开。


感谢提供链接。这可能会引发我比解决更多问题。如果冒号是 URI 方案的一部分,而 URI 方案如链接中所述由 <scheme name>: <hierarchical part> [? <query>] [# <fragment>] 组成,则方案名称在哪里?我认为 ssh: 可能是此处的 scheme 名称。通常情况下,主机名与路径之间由斜杠分隔,对吧?我习惯于在端口号前看到一个冒号,就像 @harpo 上面提到的那样,但是独立的冒号对我来说是新的。您告诉我这不是 git 的东西,而是 URI 的标准元素? - David Rhoden
从git-clone手册页面来看,它似乎是由git支持的类似scp的语法。http://www.kernel.org/pub/software/scm/git/docs/git-clone.html - objects
1
我认为你的答案可能是正确的,但是你的解释(链接到涵盖了许多关于URI的一般信息的页面)更加令人困惑而不是有帮助。 - David Rhoden

0

冒号是一种符号,它告诉Git紧随其后的字符串定义了您希望与之交互的存储库。

编辑:发现得好

正如我们所看到的远程添加是如下所示:

git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror] <name> <url>

而且你的例子是:

git remote add repo_name ssh://serveradmin%example.com@example.com:/home/45678/domains/git.example.com/html/example.git

其中'name'是'repo_name'

而URL则是一个很长的字符串

ssh://serveradmin%example.com@example.com:/home/45678/domains/git.example.com/html/example.git

当我们看到它在开头定义了ssh协议时,这一点变得更加明显。

在URL中,您可以定义冒号而不需要端口值,并且该协议的默认端口通常用作端口号,这似乎就是这里发生的情况。

因此,问题的标记和Harpo评论的标记


我认为这可能是答案,但如果没有字符串,那意味着什么? - David Rhoden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接