我有一个文件夹,其中包含大约10个子文件夹,每个子文件夹包含一个单独的git repo。所以像这样:
MainFolder/:
-- GitRepoA/
-- GitRepoB/
-- GitRepoC/
-- GitRepoD/
-- etc.
我经常想查看最新情况,特别是我想要一个命令,列出所有子文件夹中git status
的输出。有人知道解决方案吗? (顺便说一下,我在Mac OSX上)。
答案 0 :(得分:3)
遍历每个目录,并分别使用命令行选项.git
和--work-tree
设置工作目录和--git-dir
目录:
for x in *; do git --work-tree="$x" --git-dir="$x/.git" status; done
答案 1 :(得分:0)
您可以创建一个脚本。也许还可以将其作为一个函数创建并放置在.bash_profile
。
#!/bin/bash
REPOS=(GitRepoA GitRepoB GitRepoC AnotherRepoA)
for R in "${REPOS[@]}"; do
echo "Checking repo $R."
pushd "$R" >/dev/null && {
git status
popd >/dev/null
}
done
将其放在主文件夹中并运行
bash script_name.sh
如果你的回购是统一的,你可以做一些事情,如:
shopt -s nullglob
REPOS=(GitRepo{A..Z} AnotherRepoA)
或者只是
shopt -s nullglob
REPOS=(*)
就像一个功能:
function check_repos {
REPOS=(GitRepoA GitRepoB GitRepoC AnotherRepoA)
for R in "${REPOS[@]}"; do
echo "Checking repo $R."
pushd "$R" >/dev/null && {
git status
popd >/dev/null
}
done
}
答案 2 :(得分:0)
我通过编写一个shell脚本mgit来处理这个问题,该脚本在当前目录中读取一个隐藏文件.mgit,其中包含作为单独git存储库的文件夹列表。它做了类似的事情:
$ for d in */; do git -C $d status; done
答案 3 :(得分:0)
如果您需要递归(或者如果您不需要递归):
find . -name .git -type d -execdir git status \;
对于名为.git
的每个目录,将从包含它的目录(git status
)内执行-execdir
。哇,正是你想要的。
你也可以附加-prune
以免在git项目的子目录中更进一步更高效(但可能会跳过git子模块 - 我不知道子模块是如何工作的,我从不使用它们):
find . -name .git -type d -execdir git status \; -prune
答案 4 :(得分:0)
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '(echo {} && cd {} && git status -s && echo)' \;
它可以递归工作。您可以根据自己的需求更改maxdepth
和mindepth