2011-03-11 113 views
11

请原谅我的无知;我是Git的新手,不确定哪里可以找到更好的答案,但是下面的url(它指向我的中介服务器上的git存储库)中的'example.com'之后冒号的目的是什么?这个git仓库url中冒号的目的是什么?

git remote add repo_name ssh://serveradmin%[email protected]:/home/45678/domains/git.example.com/html/example.git

+2

看起来像一个没有意义的冒号。通常情况下,端口号会跟随,但没有数字时,应使用** ssh **(22)的默认端口号。 – harpo 2011-03-11 23:52:19

+0

你认为我的想法不过是没有意义的,在许多这些git URL路径中都有冒号,我直接从mediatemple文档复制了这些。它的做法与通常的端口号指示器不同,我认为。让我知道如果我错了。 – 2011-03-12 00:55:28

+2

我喜欢没有的网址 - 它显然无效,因为“%ex”不是有效的百分比转义。他们使用的位://但不遵循通用语法只是一个小问题,可能源于'ssh user @ host:path'语法(其中path是绝对的或相对于您的主目录)。 – 2011-03-12 04:04:35

回答

10

这句法实际上是错误的,但它是一个有点像scp风格的语法,你可以在git的网址中使用,它的主机名从分离该主机上的路径。 git clone documentation中列出了用于指定git URL的选项。在你的情况,你可能想的一个替代如下:

serveradmin%[email protected]:/home/45678/domains/git.example.com/html/example.git 

...或:

ssh://serveradmin%[email protected]/home/45678/domains/git.example.com/html/example.git 

在这两种情况下,用户名是serveradmin%example.com,主机名是example.com和主机上的路径是/home/45678/domains/git.example.com/html/example.git

+0

等一下,语法错在哪里?你的第一个例子看起来就像我发布的那个。随意假定我什么都不知道。并告诉我更多关于这个“你可以在git URL中使用的scp风格的语法” - 我不知道那是什么。如果您可以指向我的文档,这会有所帮助。当我主动询问有关这些冒号的问题时,我认为它有一些特定的git特定或ssh特定的语法;我想我可能是对的,但到目前为止还没有一个明确的答案。 (我欣赏所有的答案,无论如何。) – 2011-03-13 06:54:16

+2

我的第一个例子在开始时没有'ssh://',而你的那个没有。你只能在版本*中使用':'而不使用'ssh://'。有关可用于引用git存储库的URL的唯一文档位于我在答案中链接到的'git clone'手册页中。 'scp'是一个用于通过SSH复制文件的命令行工具,它恰好要求您将远程系统上的文件位置指定为'user @ host:filename'。由于'scp'被广泛使用并且被人们所熟悉,git允许您使用它来指定存储库以及严格的URL版本。 – 2011-03-13 08:11:10

+0

谢谢澄清。在使用git之前,我从来没有使用过scp,所以我不熟悉它;我感谢你的解释。我接受这个答案。 – 2011-03-13 17:28:34

4

它分离(服务器的)从路径的主机名(以回购)所解释here

+0

感谢您的链接。它可能会提出更多的问题(对我而言),而不是解决问题。如果冒号是URI方案的一部分,并且URI方案如链接中所描述的那样:':<分层部分> [? ] [#]'那么方案名称在哪里?我认为ssh:可能是这里的计划名称。通常一个主机名是通过斜线与路径分开的,对吧?我习惯于在端口号前面看到一个冒号,就像@harpo上面提到的那样,但是一个独立的冒号对我来说是新的。你告诉我这不是一个混帐的东西,而是一个URI的标准元素? – 2011-03-12 00:40:15

+0

查看git-clone手册页,它显示它可能实际上是git支持的scp-like语法http://www.kernel.org/pub/software/scm/git/docs/git-clone.html – objects 2011-03-12 07:11:54

+0

我认为你的回答可能是正确的,但是你的解释(链接到一个包含大量关于URI的信息的页面)比有帮助的更容易混淆。 – 2011-03-13 06:48:58

0

结肠是符号,其指示到GIT中的字符串定义要存储库后与。。。相互作用。

编辑:嗯发现

我们可以看到远程添加如下:

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

和你的例子是:

git remote add repo_name ssh://serveradmin%[email protected]:/home/45678/domains/git.example.com/html/example.git 

其中 '名' 是 'repo_name'

和URL是大字符串

SSH://serveradmin%[email protected]:/home/45678/domains/git.example.com/html/example.git

当我们看到它有哪些更为明显ssh协议定义在开始。

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

因此标记为问题标记为哈波的评论

+0

我想这可能是答案,但是如果没有字符串,这意味着什么? – 2011-03-12 00:45:53