默认情况下,如何从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中设置相同默认行为的方法是什么?
答案 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
即可显示你的常规编辑器。)
分支需要有一个“上游”设置(分为remote
和merge
两部分),以使它们“跟踪”“远程分支”。通常,由于远程名称为origin
,因此您将branch.master.remote
设置为origin
,将branch.master.merge
设置为master
。 (当您基于远程分支创建本地分支时,在任何甚至略微现代版本的git中,它都会将其设置为“跟踪”。)
通常,您还应将push.default
配置为git 1.x默认值以外的值; simple
可能是避免事故的最佳选择。
请注意,如果您习惯使用Mercurial,则hg pull
与git 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)