在我的Bash代码上获取当前的Git远程

时间:2014-06-24 09:01:51

标签: git shell githooks

如何获取后接收挂钩的当前遥控器?

我需要同时获取当前的遥控器和当前的分支:

  • 我知道如何获取当前分支(使用:branch=$(git rev-parse --symbolic --abbrev-ref $1)
  • 但我不知道如何获取当前的遥控器。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

后接收挂钩位于服务器端(远程URL引用的一侧)。

因此,该钩子没有“远程”的概念:它不知道它是如何访问它的回购。


任何git config branch.$branch.remote命令在服务器上游端都不起作用,因为在客户端下游存储库上设置了一个远程。


OP Omar Chacin添加in the comments

  

基本上我要做的是部署几十个网站(每个网站都有一个开发和主分支)。

     

问题是我知道如何选择我想要的分支,但是如何获得我想要部署的网站呢?   假设我有三个我想单独部署的网站。如何将我的主人或开发分支推送到其中一个网站(使用UNC)?

因此,通常的解决方案可能涉及:

  • 每个目的地仓库有一个分支(这样,分支的名称就足以让钩子在正确的目标站点结账)
  • 或:推送一个提交,该提交在其提交消息中包含相关信息(要考虑的目标站点)
  • 或:拥有n bare repos ,每个都有他们的收件后挂钩:这样,你推到右边的虚拟仓库网址,上游远程仓库,然后更新正确的直播站点。

我会选择最后一个解决方案,因为从客户端使用的UNC(远程)会明确指出要在服务器上更新的目标站点。

答案 1 :(得分:0)

Git实际上没有“当前遥控器”的概念。您有一个当前分支,可能有也可能没有与之关联的远程分支,并且可能设置了“pushremote”来覆盖远程(在这种情况下,您需要更改下面的命令)。

您可以使用git config branch.<name>.remote找到当前分支将被推送到的远程(默认情况下),其中<name>是当前分支的名称。这将为您提供遥控器的名称,您可以使用git config remote.<name>.url获取其网址,或使用git remote show <name>获取有关该网址的完整信息

因此,如果$branch是分支名称,则会告诉您推送网址:

git config remote.$(git config branch.$branch.remote).url

要处理覆盖遥控器的pushremote的情况:

git config remote.$(git config branch.$branch.pushremote || git config branch.$branch.remote).url