我在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的位置。
答案 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钩子,就像其他配置数据一样,不会在克隆上复制)。