2012-01-12 107 views
5

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

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

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

回答

3

的一种方法是使用下面的命令:

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

然后,您可以喂到它运行你所选择的命令,在每个存储库中的shell脚本这个,通过更改目录或使用Git的参数--git-dir--work-tree

+0

你能解释一下,然后在xargs命令中输入-n参数。我看了一下手册页,但是我仍然不确定它的功能。 – 2012-01-12 16:58:44

+0

@MrAxilus xargs通常使用所有输出作为命令行参数到指定的命令(在我们的例子中是dirname)。 -n要求分割所有输入的1个单词片段并为每个片段调用dirname。 – 2012-01-12 17:06:47

+0

@AlexandrPriymak,我明白了。使用find的-exec参数不是更好吗? – 2012-01-12 17:25:24

1

看看android的repo。我认为它没有任何具体的android,你将能够适应你的需求。让你的当前目录下的所有的Git回购的列表

+0

嗯,回购做的那个git没有做什么? – 2012-01-12 17:12:32

3

这里有一个(哈克)的单行为:

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

拯救生命的大声笑:) – 2014-12-04 09:35:12

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