kra*_*r65 5 git macos bash subdirectory
我有一个文件夹,其中包含大约 10 个子文件夹,每个子文件夹都包含一个单独的 git 存储库。所以像这样:
MainFolder/:
-- GitRepoA/
-- GitRepoB/
-- GitRepoC/
-- GitRepoD/
-- etc.
Run Code Online (Sandbox Code Playgroud)
我经常想检查发生了什么,特别是我想要一个命令,该命令列出git status所有已更改子文件夹的输出。有人知道解决方案吗?(顺便说一下,我在 Mac OSX 上)。
遍历每个目录,并分别.git使用命令行选项和 设置工作目录--work-tree和目录--git-dir:
for x in *; do git --work-tree="$x" --git-dir="$x/.git" status; done
Run Code Online (Sandbox Code Playgroud)
如果你需要递归(或者如果你不需要也可以):
find . -name .git -type d -execdir git status \;
Run Code Online (Sandbox Code Playgroud)
对于命名的每个目录,.git将从git status包含它的目录中执行( -execdir)。哇,正是你想要的。
您也可以追加,-prune以免在 git 项目的子目录中进一步操作以提高效率(但可能会跳过 git 子模块——我不知道子模块如何工作,我从不使用它们):
find . -name .git -type d -execdir git status \; -prune
Run Code Online (Sandbox Code Playgroud)
您可以创建一个脚本。也许也只是将其创建为函数并将其放置在.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
Run Code Online (Sandbox Code Playgroud)
将其放入主文件夹并运行
bash script_name.sh
Run Code Online (Sandbox Code Playgroud)
如果您的存储库是统一的,您可以执行以下操作:
shopt -s nullglob
REPOS=(GitRepo{A..Z} AnotherRepoA)
Run Code Online (Sandbox Code Playgroud)
或者也许只是
shopt -s nullglob
REPOS=(*)
Run Code Online (Sandbox Code Playgroud)
就像一个函数一样:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2524 次 |
| 最近记录: |