递归检查git目录更新

时间:2012-01-12 16:24:17

标签: linux git ubuntu

我想知道是否有办法确定指定目录下的哪些子文件夹是git项目。之后,检查哪些git项目需要通过'git fetch'或其他方式进行更新。

例如,我在我的主文件夹中有一个名为development的文件夹,它使用git保存各种项目,其中大约10%。我希望能够运行一个命令来检查开发目录中所有git文件夹的任何更新,而不是单独检查项目更新。

如果它可以更新非冲突的项目也会很好。

4 个答案:

答案 0 :(得分:4)

获取当前目录下所有Git repos列表的一种方法是使用以下命令:

find . -name '.git' | xargs -n 1 dirname

然后,您可以将其提供给shell脚本,该脚本在每个存储库中运行您选择的命令,方法是更改​​为目录或使用Git的--git-dir--work-tree参数。

答案 1 :(得分:3)

这是一个(hacky)单行代码:

back=`pwd`; for d in `find . -type d -name .git` ; do cd "$d/.."; git pull ; cd $back ; done

答案 2 :(得分:1)

看看android的repo。我认为它没有特定于Android的东西,你可以根据自己的需要进行调整。

答案 3 :(得分:1)

简而言之:

find . -name .git -execdir git pull -v ';'

您还可以创建以下脚本(例如update_src.sh):

#!/bin/sh
# Script to pull all git repositories to the recent version.
ROOT=$(git rev-parse --show-toplevel 2> /dev/null)
find "$ROOT" -name .git -type d -execdir git pull -v ';'

或在shell中创建以下别名:

alias git-pull-all='find $(git rev-parse --show-toplevel 2> /dev/null) -name .git -type d -execdir git pull -v ";"'

或在~/.gitconfig