使用两个不同的URL推送到同一个git远程

时间:2011-08-11 20:32:05

标签: git

我的家庭服务器上有一个裸存储库,我从我的服务器上推送 笔记本电脑备份。由于新的路由器我不能再推了 在我的家庭局域网内使用全局URL(家庭服务器)到家庭服务器 与“NAT环回”有关,但需要使用本地LAN地址。所以我的 .git / config现在包含两个相同裸存储库的遥控器:

[remote "home1"]
        url = ssh://username@my.url/home/username/git_bare_repos/repo.git
        mirror = true
[remote "home2"]
        url = ssh://username@192.168.1.74/home/username/git_bare_repos/repo.git
        mirror = true

所以,问题:这可以吗?是否存在潜在的危险/陷阱?有没有更好的方法来做到这一点,所以根据我是否在家,我不必使用不同的命令?

2 个答案:

答案 0 :(得分:2)

没关系。毕竟他们是同一个回购。

唯一不同的是,根据您当前的位置,您必须从一个遥控器或另一个遥控器推/拉/等。

Git为每个分支,标记,远程跟踪分支等保留一个引用。实际上,它们都是对提交的引用,它们在.git/refs/...中有一个文件表示。

通过比较这些引用,git知道每个分支,标记等的状态。例如,如果您将refs/heads/masterrefs/remotes/origin/master进行比较,并且分支不同步,则这些refs会有所不同。要找到哪一个过时,git可以只验证本地分支中是否存在远程提交,如果存在,则远程分支已过时。这也允许git告诉你本地分支在远程分支之前提交的提交数量,反之亦然。

可以找到更深入的解释here

答案 1 :(得分:0)

假设您从home1中提取最新信息,进行一些更改并将其推回。然后你从另一个地方做一些工作,然后把它们推到home2。 Git不知道home1home2是同一个存储库,但没关系。 Git看到home2“某种程度上”已经将您之前推送的更改添加到home1并且只是推动您的新更改。