2010-05-26 166 views

回答

24

对于Git 1.6.4及更高版本,请将remote.<name>.pushurl设置为git config

人们可能会使用它来拉动使用只读https:协议,并推送使用基于SSH的协议。


origin的URL(remote.origin.url)是https://git.example.com/some/repo.git。它是只读的,但您可以通过基于ssh的“URL”[email protected]:some/repo.git进行写入访问。运行以下命令,以推动效果通过基于SSH协议:

git config remote.origin.pushurl [email protected]:some/repo.git 
+0

如何推送到say'开发“分支并从同一个远程+裸Git仓库中的'生产'分支拉来? – Ninad 2015-07-23 12:36:20

3

从我可以从git config man page聚集,上游回购是:

  • 默认原点都git pull/fetchgit pull

设置由branch.remote

  • 总是
  • 对于给出的分支,我没有看到任何方式有两个单独的远程默认

  • +0

    对于git v1.8.3.2,在尝试git config remote ...和git remote set-url ...答案后,对于单个分支或整个分支,这似乎是真实的回购的副本。 – 2013-08-29 03:13:13

    +0

    将默认远程设置重置为当前分支的“origin”,并从匹配的分支名称push push/pull到/ from git push --set-upstream origin hobs 2014-09-12 21:24:14

    71

    由于Git版本1.7.0,可以将此与:

    git remote set-url --push origin https://your.push.com/blah/ 
    
    +0

    比问题晚3年,但这应该是新接受的答案! – Kevlar 2013-09-25 20:47:34

    +1

    @Kevlar为什么?接受用于标记并不总是“最好”的答案,但是为OP制定的答案(阅读FAQ以获取更多信息)。在提出问题的时候,答案是行不通的(甚至不存在),因为git早于1.8。但是接受的答案确实为OP做好了准备。你在三年后改变OP的决定的理由是什么? – trejder 2013-12-06 10:26:53

    +7

    @trejder Stack Overflow也是一个为未来访问者提供有用答案的地方,他们可以通过搜索引擎或其他方式找到问题。现在最好的答案首先出现是很有价值的。我并不是说OP *必须*改变接受的答案,但是这样做是完全合理的(并且在我看来是净积极的)。 – amalloy 2015-08-20 00:30:21

    3

    这个工作在1.7.1及以上 -

    git remote set-url --push origin [email protected]:username/somerepo.git 
    
    +0

    与[user392887's answer](http://stackoverflow.com/a/17930364/41071)有什么不同? – svick 2014-04-18 02:20:29

    +1

    我没有评论或降低该答案的能力。在我的回答中需要注意两点:1)我使用ssh。根据GitHub的说法,“我们强烈建议在与GitHub进行交互时使用SSH连接,SSH密钥是识别可信计算机的一种方式,无需密码。” 2)任何使用RHEL/CentOS 6的人都会默认使用git 1.7.1 - 1.7.1支持set-url,我只是用它。 – potto 2014-04-18 11:45:12

    18

    由于Git的1.8.3,您可以使用remote.pushDefault选项做你想要什么(即具有不同的默认遥控器为pullpush)。您可以像其他任何设置一样来设置选项;例如,将其设置为pushTarget遥控器,使用

    git config remote.pushDefault pushTarget 
    

    此选项将具有以下效果:

    • git pull将拉动从远程指定由在相关分支部remote选项.git/config,而
    • git push将推送到由remote.pushDefault指定的远程。

    请注意,您需要指定名称远程而不是URL。这使得该解决方案比涉及remote.<name>.pushurl的解决方案更灵活,因为(例如)您仍然会为两个遥控器都追踪分支。无论您是需要还是希望这种灵活性都取决于您。

    The release notes表示此选项专门用于支持三角形工作流程。

    +0

    奇怪:我以为你只是向上游推销,而你不知道有多少下游回购正在从你身上拉下来:请参阅http://stackoverflow.com/a/2749166/6309 – VonC 2015-07-02 19:12:17

    +0

    @VonC啊,是的,我明白了为什么它很混乱。我通常会调用远程我想*从*默认'上游',因为......呃......它是在我的存储库上游,在这些拉动。但是选项是'pushDefault',而不是'pullDefault',所以我在例子中使用'downstream'作为名称。这可能是一个更好的主意,称为“defaultPushTarget”;) – MvanGeest 2015-07-02 19:28:30

    +0

    @MvanGeest我同意。但我确认你通常会推向“上游”。有一个(或很少和已知的)上游。但是可能会有很多(和未知的)下游。这就是DVCS(如“分布式”)宇宙。 – VonC 2015-07-02 19:34:30