2011-09-27 59 views
8

git pull --help如何“轻松”拉所有分支?

将远程存储库中的更改合并到当前分支中。

我拉着git仓库离线查看代码,并喜欢有不同分支的更新代码。如何轻松地为所有分支拉取代码而无需手动为每个分支拉动?

--all - 取回所有遥控器。

- 都没有帮助。

+0

http:// stackoverflow。com/questions/4318161/can-git-pull-all-update-all-my-local-branches should help – VonC

回答

8

如果本地存储库仅用于只读,并且没有任何文件被修改,那么下面的脚本就可以实现。

for i in $(git branch | sed 's/^.//'); do git checkout $i; git pull; done 

似乎没有相同的git等效命令。

5

pull将远程分支合并到您当前的本地分支,因此拉动所有远程分支可能不是您想要的。

0

您必须单独合并每个分支。如果你合并成多个分支并且其中有多个合并冲突,那么你怎么可能同时解决呢?

+0

Gareth - 正如我所提到的,我只用git进行离线查看,不会有任何冲突。 git命令或shell脚本可能满足我的要求。 –

7

像Praveen Sripati的回答一样,但作为一个shell函数,它将您带回到您开始的分支。

只是把这个在你的〜/ .bash_aliases文件:

function pull-all() { 
    START=$(git branch | grep '\*' | set 's/^.//'); 
    for i in $(git branch | sed 's/^.//'); do 
     git checkout $i; 
     git pull || break; 
    done; 
    git checkout $START; 
}; 

随着||如果出现冲突或类似情况,打破它并不会令人满意。

+0

工作完美,thx队友! –

1

灵感来自@cellofellow我加this.profile在Mac OS X:

function git-pull-all() { 
    START=$(git symbolic-ref --short -q HEAD); 
    for branch in $(git branch | sed 's/^.//'); do 
     git checkout $branch; 
     git pull ${1:-origin} $branch || break; 
    done; 
    git checkout $START; 
}; 

function git-push-all() { 
    git push --all ${1:-origin}; 
}; 

的主要区别是:

  1. 我得到当前分支git branch | grep '\*' | set 's/^.//'而不是git branch | grep '\*' | set 's/^.//'

  2. 您可以提供遥控器作为参数,例如git-pull-all origin。如果您省略参数,则默认为原点。

  3. 还添加了一个类似的快捷方式将多个分支推回服务器。

+0

干得好。我喜欢改变使用哪个遥控器的选项。 – cellofellow

1

如果您只需要离线功能,您可以简单呼叫git fetch -all以获取所有当前信息。现在,您可以在磁盘上获得所有信息,并可以脱机工作。简单合并或签出您想要处理的分支。 Git pull是git fetch && git merge