如何防止使用login用户名的git

我想让任何用户克隆存储库而不必在clone命令中指定用户名

例如,说我的git用户名是john.doe (例如客户的要求),但是我在个人电脑上login的本地帐户是j.doe (例如公司要求),git会尝试使用j.doe来克隆版本库。

这是相当微妙但显着的不同,所以我用下面的两个例子来说明:

1.用匿名语法克隆:

如果我做到以下几点:

j.doe~ $ git clone https://mygit.repo.url/somerepository.git 

… git假设没有要求远程用户名是本地帐户(即j.doe )的用户名相同,并尝试克隆如下:

 Cloning into somerepository [email protected]'s password: 

但在这种情况下, j.doe不是远程存储库上的帐户。

2.用明确的用户名克隆:

通常的解决方法是按如下所示指定远程用户名:

 j.doe~ $ git clone https://[email protected]/somerepository.git 

这成功,但要求每个用户使用不同的克隆命令。

为什么我在乎

有几种情况下匿名语法更合适,例如:

  1. 它更便于自动化 – 无需编写操作系统或语言特定的input语句来获取用户名。
  2. 这对用户来说更加一致。 用户/密码请求将始终看起来相同。
  3. 这使得编写清晰一致的安装说明变得更加容易。 用户可以复制和粘贴。
  4. 防止为每个尝试自动执行该过程的脚本语言和操作系统编写不同的包装。
  5. 当检出一个依赖于git子模块的仓库时,如果login用户与git用户不一样,那么.gitmodules文件必须首先被编辑以包含用户名。 这在多个用户的情况下是非常不方便的。

例如。

我知道这个function是可能的,因为github使用它。 例如,如果您使用匿名语法在github上克隆存储库,您将看到如下内容:

 j.doe~ $ git clone https://github.com/dbostock/d3.git Cloning into 'd3'... Username for 'https://github.com': 

很不错! 使用任何shell,任何操作系统,任何脚本语言,我可以识别,validation和克隆我的存储库。

所以最后,我的问题归结为: github如何做到这一点?

Root可以像使用其他用户一样使用sudo 。 要么是这样,要么只是在克隆操作之后改变文件的所有权。

有没有办法,无论是从客户端或服务器,configuration一个Git仓库,以便它总是要求用户名?

Git将使用〜/ .git / config中指定的用户名或者在你的仓库URL中指定的用户名。 请记住,这是远程系统用户名,而不是本地用户名,所以它不会影响所有权。

这里的解决scheme是使用sudo进行git克隆操作。

从我看到的答案似乎是用来克隆存储库的协议。 根据这个git书 ,在标题为SSH协议的一节中它说:

你也可以不指定一个用户,Git假定你当前login的用户为。

替代协议包括:

  • https – 由github使用,并允许您指定一个用户,
  • 本地 – 不需要authentication,
  • 混帐 – 不提ssh的问题,但我还没有检查。