我想让任何用户都能克隆存储库无需在克隆命令中指定用户名。
例如,我的 git 用户名是约翰·多伊(例如客户要求)但我在电脑上登录的本地帐户是多伊(例如公司要求),git 将尝试使用多伊克隆存储库。
这是一个非常微妙但重要的不同,因此我使用了以下两个示例来说明:
1.使用匿名语法进行克隆:
如果我执行以下操作:
j.doe~
$ git clone https://mygit.repo.url/somerepository.git
... git 假设都没问一下远程用户名与本地帐户的用户名相同(即多伊) 并尝试进行如下克隆:
Cloning into somerepository
[email protected]'s password:
但在这种情况下,多伊不是远程存储库上的帐户。
2. 使用显式用户名克隆:
通常的解决方法是按如下方式指定远程用户名:
j.doe~
$ git clone https://[email protected]/somerepository.git
这将成功但要求每个用户使用不同的克隆命令。
我为何关心?
在某些情况下匿名语法更合适,例如:
- 它更易于自动化 - 无需编写操作系统或特定于语言的输入语句来获取用户名。
- 对用户来说,它更加一致。用户/密码请求将始终相同。
- 它使编写清晰一致的安装说明变得更容易。用户可以复制和粘贴。
- 避免为每种尝试自动化该过程的脚本语言和操作系统编写不同的包装器。
- 当检出依赖 git 子模块的存储库时,如果登录用户与 git 用户不同,则必须先编辑 .gitmodules 文件以包含用户名。在有多个用户的情况下,这非常不方便。
举个例子。
我知道这个功能是可行的,因为 GitHub 使用它。例如,如果你使用匿名语法你会看到类似下面的内容:
j.doe~
$ git clone https://github.com/dbostock/d3.git
Cloning into 'd3'...
Username for 'https://github.com':
太棒了!使用任何 shell、任何操作系统、任何脚本语言,我都可以识别、验证和克隆我的存储库。
所以最后,我的问题归结为:github 是如何做到这一点的?
答案1
Root 可以sudo
像其他用户一样使用。或者,在克隆操作后更改文件的所有权。
有没有办法(从客户端或服务器)配置 git 存储库,以便它始终要求输入用户名?
Git 将使用 ~/.git/config 中指定的用户名或存储库 URL 中指定的用户名。但请记住,这是远程系统用户名,而不是本地用户名,因此它根本不会影响所有权。
这里的解决方案是用于sudo
您的 git clone 操作。
答案2
从我读到的内容来看,答案似乎是用于克隆存储库的协议。根据这本 git 书,在标题为SSH 协议它说:
您也可以不指定用户,Git 将假定您当前以该用户身份登录。
替代方案包括:
- https- 由 github 使用,它允许您指定用户,
- 当地的- 无需身份验证,
- git- 没有提到 ssh 问题,但我还没有检查。