将所有远程分支提取到裸Git存储库中

将所有远程分支提取到裸Git存储库中,git,github,Git,Github,我设置了一个Github post-receive钩子,每当推送到我的Github存储库时,它都会在我的web服务器上运行一个脚本 当脚本运行时,我希望它保持存储库的本地裸克隆与我的Github存储库同步。为此,我让它运行以下命令: git fetch origin && git reset --soft refs/remotes/origin/master git获取源代码和git重置&git重置——软引用/远程/源代码/主代码 然后,如果从我的工作站推到Github上的master,一切正常

我设置了一个Github post-receive钩子,每当推送到我的Github存储库时,它都会在我的web服务器上运行一个脚本

当脚本运行时,我希望它保持存储库的本地裸克隆与我的Github存储库同步。为此,我让它运行以下命令:

git fetch origin && git reset --soft refs/remotes/origin/master git获取源代码和git重置&git重置——软引用/远程/源代码/主代码 然后,如果从我的工作站推到Github上的master,一切正常。但是,如果我推送到另一个远程分支,更改不会反映在服务器的本地裸存储库中

我假设有某种方法让脚本获取所有远程分支,但我不知道如何做到这一点。我知道较新版本的git对fetch/pull有一个--all选项,但我使用的是git版本1.6.3.3,它似乎没有这个选项

有人知道我如何获取脚本以获取所有远程分支吗


谢谢

或许可以使用shell脚本

#!/bin/sh

for i in `git remote show`; do
    git fetch $i;
done;

注意:您的问题中出现了一个小的术语错误:
git fetch | pull
--all
选项会获取所有“远程”,而不是“远程分支”。

我想我会提供自己的解决方案。我接受了拉姆库马尔的想法,因为这正是我的灵感所在。区别在于我不想从所有的远程获取,而是要从“origin”中的每个远程分支获取


免责声明:尚未真正实现此功能,但它应该已经关闭。

git fetch origin'*:*“
对我有效。

git fetch origin*:*
对我在Windows上有效


git版本2.29.2.windows.3

“升级到最新的git”似乎是一个相当直接的解决方案,当然?我想我可以做到。我只是想避免弄乱Ubuntu的软件包。谢谢你提供的所有信息。我不知道+1:)Git 1.6.3有
Git remote update
,这是该版本的内置版本
git-fetch--all
在拥有它的版本中是首选的,因为git-remote命令应该用于维护远程设备的配置,而不是对远程设备执行操作(
update
在这方面是一个异常,因此首选
git-fetch--all
).git fetch origin“:”看起来像是最好的。您真的不应该尝试分析git分支的输出。每个ref的较低级别的“管道”命令git设计用于对ref名称进行脚本化迭代。我很惊讶一个普通的
git-fetch-origin
并没有更新所有的“origin/*”远程跟踪分支。反复使用
git-fetch-origin-branch-name
也可能不会达到您想要的效果。当你给git fetch一个不带冒号的refspec(最后一个参数是refspec)时,它只将获取的提交存储在特殊的fetch_HEAD ref中(它不会更新你的远程跟踪分支)。我明白你的意思。我不知道每个ref命令的git。谢谢这不需要循环。如果只需要分支,请使用
refs/heads/*:refs/heads/*
。如果只需要分支和标记(不包括github拉取之类的内容),还可以添加
refs/tags/*:refs/tags/*

#!/bin/bash
REMOTE_BRANCHES=$(git branch -r | awk -F'/' '{print $2}')
for i in $REMOTE_BRANCHES; do
    git fetch origin $i
done