克隆后,Git远程源不正确

时间:2015-03-11 16:52:39

标签: git ssh

我在Media Temple服务器上有一个Git存储库:http://git.mywebsite.com/example.git

如果我克隆了这个repo然后查看配置文件,我会得到以下结果:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = http://git.mywebsite.com/example.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

问题在于我使用SSH提交并将更改推回到Media Temple服务器repo ...换句话说,该url与我将其拉下来的网址相同,所以如果我查看另一个工作副本,我必须在配置文件中包含以下内容才能使其正常工作:

[remote "origin"]
    url = ssh://mywebsite.com@s00000.gridserver.com/home/00000/domains/git.mywebsite.com/html/example.git

我在服务器的配置中也有相同的行,所以希望它会被拉到新的克隆(但它没有)

所以问题是,如何让用户克隆一个repo然后进行更改并提交而不必更改远程源AFTER,甚至不必添加SSH url?即,它们在克隆时默认已存在。

正如我上面所述,我在服务器上的配置文件中声明了它,但是当我创建一个新的repo克隆时它被覆盖了。 注意:即使我在服务器.e.g网格上调用遥控器不同,它仍然会被删除并替换为从中下载repo的位置。

2 个答案:

答案 0 :(得分:0)

[remote "origin"]
    url = http://git.mywebsite.com/example.git
    fetch = +refs/heads/*:refs/remotes/origin/*

是在使用此URL进行克隆时创建的。你是从原点克隆出来的。您可以按照描述进行更改,因此您的本地存储库将忘记它具有此来源,并将使用新原点和其他URL。

我建议使用多个遥控器:

[remote "origin"]
    url = http://git.mywebsite.com/example.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote "cameronsotherremote"]
    url = ssh://mywebsite.com@s00000.gridserver.com/home/00000/domains/git.mywebsite.com/html/example.git
    ...

然后你就可以使用这两个"位置"无需一次又一次地更改配置文件。但你必须做一次。

答案 1 :(得分:0)

简短版本:你不能总是得到你想要的东西(想象一下这里适当的音乐): - )

将备用URL传递给克隆存储库的人的唯一方法是使备用URL本身成为存储库本身的一部分,例如存储在提交中的文件(可能在特殊分支下)。

但是,您可以将此备用网址设置为现有“远程”来源的“推送网址”:

git config remote.origin.pushurl ssh://...

将命令放在一个文件中,提交文件(也许可能在“特殊”分支上,甚至可能在一个完全没有连接到master的提交图段中),并且在克隆之后,检查出来并运行该文件。这也是一个很好的方式来传递你希望人们使用的钩子(因为git钩子,就像其他配置数据一样,不会在克隆上复制)。