Git - SSH - 主机:我如何将不同的IP委派给远程源,具体取决于每次都有效?

时间:2014-09-06 18:13:44

标签: linux git ssh

在家时,git fetch origin master应通过ssh连接到git@192.168.xx.xx

在旅途中,git fetch origin master应通过ssh连接到git@xxx.linkpc.net

可能的解决方案

  • Having multiple remotes对于相同的存储库/分支工作,但git不必要地跟踪多个头。这个解决方案只是与美丽相混淆。
  • 将主机名分配给远程和注释/取消注释/etc/hosts条目以委派ips为nice solution,但包括sudoing并输入root密码,这是一种单调乏味。
  • 每用户主机文件为out of the question.
  • 编写一个脚本,每次调用origin时都会委派正确的IP is ideal
  • 编写一个每次用户调用时将以root身份执行的脚本,似乎是marginally fair solution

问题

有人可以使用一种解决方案来解决这个问题 - 通过各种手段 - 不应该被视为"一个hackish字符"?

2 个答案:

答案 0 :(得分:1)

我打算给你一个提示,你可以制定解决方案。您可以将SSH configMatchexec关键字一起使用:

  

匹配

     

限制以下声明(直到下一个Host或Match关键字)仅在满足Match关键字后的条件时使用。

     

...

     

exec 关键字在用户shell下执行指定的命令。如果该命令返回零退出状态,则条件为   被认为是真的。

答案 1 :(得分:1)

请记住,您正在通过SSH进行隧道传输,因此您的~/.ssh/config会将每用户主机文件带回问题,例如,

Host dynamic-repo-host
    HostName 192.168.xx.xx
    #HostName xxx.linkpc.net

然后在

中修改origin的网址
ssh config remote.origin.url git@dynamic-repo-host

适当地手动修改~/.ssh/config,然后给出你想要的效果。

如果您想要一个完全不干涉的解决方案,请在Match中使用~/.ssh/config,但要执行的具体命令将取决于本地计算机运行的网络的详细信息。