如何在Git中设置默认推送存储库?

时间:2013-12-06 13:38:11

标签: git default

默认情况下,如何从git pull存储库和git@source.com:...git push存储库中创建git@target.com:...

在Mercurial中,我使用以下内容创建.hg/hgrc

[paths]
default = ssh://hg@source.com/...
default-push = ssh://hg@target.com/...

在Git中设置相同默认行为的方法是什么?

3 个答案:

答案 0 :(得分:4)

在git中几乎相同。每个存储库都有一个.git/config文件,其中应该包含以下内容:

[remote "origin"]
url = git://path/to/your/repo
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

您不必手动添加,有很多命令可以帮助您。一个好的开始是Git SCM Book

要设置默认的前一个分支,您只需输入:git branch --set-upstream-to YOUR_REMOTE_NAME/YOUR_BRANCH_NAME(当使用git> = 1.8.0时)

答案 1 :(得分:3)

在git中,遥控器位于[remote "<name>"]部分。当您克隆某些内容时,初始遥控器为origin,因此通常是要使用的遥控器。获取网址为url,推送网址为pushurl。您还需要fetch行(或多行)来引入分支名称。

通常,您会在.git/config中看到类似的内容:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ssh://...

将网址更改为git://source并添加pushurl = git://target(您可以使用git config命令或git remote执行此操作,或者只需运行git config -e即可显示你的常规编辑器。)

分支需要有一个“上游”设置(分为remotemerge两部分),以使它们“跟踪”“远程分支”。通常,由于远程名称为origin,因此您将branch.master.remote设置为origin,将branch.master.merge设置为master。 (当您基于远程分支创建本地分支时,在任何甚至略微现代版本的git中,它都会将其设置为“跟踪”。)

通常,您还应将push.default配置为git 1.x默认值以外的值; simple可能是避免事故的最佳选择。

请注意,如果您习惯使用Mercurial,则hg pullgit fetch最相似,而不是git pull; hg pull -u有点接近git pull,但我建议您自己训练使用git fetch代替git pull(即使您不习惯Mercurial,实际上:-)) 。它还需要调整hg和git处理分支的不同方式(hg为分支提供一个全局名称空间,另一个用于书签的全局名称空间; git具有每个远程“远程分支”名称空间,而本地分支更多像hg本地书签。)

答案 2 :(得分:1)

我结合@torek,@ klaustopher的提示(感谢答案)和来自@Mali的重复链接,让Mercurial背景的人们更容易找到答案。

要在Git中添加default-push,请使用:

$ git config remote.origin.pushurl git@github.com:yourname/project.git

检查当前设置:

$ git remote -v
origin  git@github.com:user/project.git (fetch)
origin  git@github.com:yourname/project.git (push)