我有一个 .git / config 文件,其中有多个用户定义为:
[user]
name=user1
email=user1@domain.com
name=user2
email=user2@domain.com
...
这是通过以下方式创建的:
git config --add user.name user1; git config --add user.email user1@domain.com
git config --add user.name user2; git config --add user.email user2@domain.com
用户user1,user2,...将执行git操作,但绝不会同时进行。
我使用GIT_SSH作为一个脚本,从〜/ .ssh / config文件中选择正确的信息:
ARGS=$(awk "/^Host/{flag=0}flag{printf \"-o %s=%s \",\$1,\$2}/Host $GIT_USER_REPO/{flag=1}" ~/.ssh/config)
exec /usr/bin/ssh $ARGS "$@"
如果我只有一个用户,那部分就可以了。
问题是我不知道如何配置 [remote“origin”] ,以便url可以支持多个用户。我现有的网址被指定为一件事:
[remote "origin"]
url = ssh://user1@repo.com:1234/the/path
多个用户如何使用同一目录进行git操作?
在最坏的情况下,我认为$ GIT_SSH指定的脚本可能会修改.git / config文件并动态更新url。我希望有一个更简单的解决方案。该解决方案将涉及脚本:
请注意,出于这个问题的目的,我不想为每个用户创建单独的目录(执行git克隆,然后执行其他git操作)。将在目录层次结构上运行的“用户”是基于cron的自动化脚本的一部分,其中有很多。拥有多个目录在时间和空间方面都是令人望而却步的。我只想知道我是否可以使用单个目录(带子目录)并让多个用户在假设操作永远不会重叠的情况下执行git操作。谢谢!
答案 0 :(得分:0)
我可以确认@manzur和@ etan-reisner所说的都是真的。
更多信息:当我查看底层ssh命令是什么时,我看到:
exec /usr/bin/ssh -o User=user1 -o IdentityFile=/path/to/ssh/key -o HostName=repo.com -o StrictHostKeyChecking=no -o UserKnownHostsFile=/path/to/knownhosts -p <port> repo.com git-receive-pack '/repo/path'
因此,我看到用户是通过User = user1字段明确指定的,而不是通过git-receive-pack之前的user1@repo.com条目隐式选择。事实上,通过这样的条目,git push失败了。
我的.ssh / config文件包含:
Host user1-repo
User user1
IdentityFile /path/to/ssh/key
HostName repo.com
StrictHostKeyChecking no
UserKnownHostsFile /path/to/knownhosts
您可以从我上面的原始awk命令中看到上面如何将上述内容合并到上面的exec命令中,以及它如何明确指定User,这样就不必让远程url在url中指定用户名。
非常感谢指针!