如何将多个网址附加到单个git遥控器?

时间:2010-04-15 21:16:00

标签: git

我目前正在通过msysgit和Cygwin的组合在Windows上使用git。

我有一台笔记本电脑,我移动了很多,所以它不在一致的位置。不幸的是,由于我连接的所有位置都没有解析计算机名称,因此我没有一致的名称,所以我不能只使用计算机名作为网址的主机(例如git:/ / compname / repo),所以我必须使用IP地址。

有没有办法可以为特定的遥控器添加多个网址?我见过

git remote set-url --add [--push] <name> <newurl>

作为向远程添加多个URL的方法,我可以在.git / config文件中看到更新,但git只尝试使用第一个。

有没有办法让git尝试使用所有网址?我已经尝试了git fetch和git远程更新,但是在第一个url之后都没有尝试任何东西。

请注意,我还没有在linux上试过这个,而且我无法修复计算机名称解析,因为它正在运行。

5 个答案:

答案 0 :(得分:2)

我认为您最好的方法是将远程URI设置为指向计算机名,然后将计算机名添加到您的主机文件(位于%SystemRoot%\system32\drivers\etc\hosts):

computername    192.168.100.34
# computername    192.168.100.68

然后,您可以为不同的IP地址保留多个条目,并根据需要注释/取消注释。没有更多关于在每个repo基础上更改远程URI的麻烦,只需在一个地方更新,然后使用computername作为URI将使用新位置。

答案 1 :(得分:1)

我个人做同样的事情,我用的是两个遥控器

原产地:我家的回购地点 foriegn:我在其他任何地方的回购地点(我的dns重定向到我家)

然后我只是推/拉到适当的遥控器,它有点乱,但它有效。

答案 2 :(得分:1)

这种方法的灵感来自@Mark Stickley的答案。 即使您有两个不同的端口号(不仅仅是主机名)从两个不同的位置访问同一台机器,它仍然有效。

根据情况的数量,您可以保留~/.ssh/config的多个版本。

例如,在我的家中,我访问我的服务器,主机名为my-fancy-server,端口为22。 在办公室,主机名为my-dyndns-name,端口名称为XXX

所以我有两个版本的~/.ssh/config。 在家里,它说:

Host home
    my-fancy-server
    Port 22
    User abhishek
    IdentityFile /home/abhishek/.ssh/id_rsa

(请相应调整最后两个值。如果您不使用键,则不需要最后一个值) 在办公室,它说

Host home
    my-dyndns-name
    Port XXX
    User abhishek
    IdentityFile /home/abhishek/.ssh/id_rsa

我有一个脚本可以在移动到新位置时调整~/.ssh/config的内容。 人们可以通过编写由网络变化触发的脚本来实现自动化。

我的git配置文件中只有一个遥控器,看起来像

[remote "origin"]
    url = home:/path/to/repo
    fetch = +refs/heads/*:refs/remotes/origin/*
编辑:我发现我不必做这一切。我刚刚在我的路由器上启用了nat loopback,现在我可以使用外部名称/端口统一访问我的计算机了。然而,在许多情况下,如公司网络,弄乱路由器可能不是一个选择

答案 3 :(得分:0)

我建议您使用其他遥控器作为笔记本电脑与您使用的其他电脑之间的同步点。

e.g。 github上。

如果您想将其保密,请尝试使用unfuddle或codaset。

答案 4 :(得分:0)

由于其他答案没有解决原来的 OP 问题,这里是我的:

创建一个名为 all 的新遥控器

git remote add all git@github.com:namespace/repo-name.git

将远程 URL 更改为仅 push url

git remote set-url --add --push all git@github.com:namespace/repo-name.git

向其添加新的推送 URL

git remote set-url --add --push all git@gitlab.com:namespace/repo-name.git

当然,每个遥控器中的 namespacerepo-name 不必相同。

此外,push URL 有一个限制:顾名思义,它们只能推送。您不能一次从多个网址中提取。但是,您可以使用 git fetch --all 同时获取它们,也可以一次从它们中提取一个。

如果您需要更多信息,可以查看此处的文档:https://git-scm.com/docs/git-remote