多个用户如何使用相同的目录层次结构进行git操作?

时间:2016-04-27 12:39:30

标签: git bash

我有一个 .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。我希望有一个更简单的解决方案。该解决方案将涉及脚本:

  1. 从当前目录开始,向上搜索.git目录。
  2. 从上面的ARGS中,提取一个来自.ssh / config文件的条目,该条目是url值。
  3. 更新.git / config以使用此网址。
  4. 更改exec / usr / bin / ssh行以使用此值。
  5. 请注意,出于这个问题的目的,我不想为每个用户创建单独的目录(执行git克隆,然后执行其他git操作)。将在目录层次结构上运行的“用户”是基于cron的自动化脚本的一部分,其中有很多。拥有多个目录在时间和空间方面都是令人望而却步的。我只想知道我是否可以使用单个目录(带子目录)并让多个用户在假设操作永远不会重叠的情况下执行git操作。谢谢!

1 个答案:

答案 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中指定用户名。

非常感谢指针!