여러 저장소가 있는 폴더가 있습니다. 내가 달릴 수 있는 방법이 없을까 git branch
?자식각 폴더 내부의 명령?
$ ls
project1 project2 project3 project4
아래와 같은 출력을 원합니다.
$ command
project1 [master]
project2 [dev]
project3 [master]
project4 [master]
답변1
이 시도. $1
모든 저장소를 포함하는 상위 디렉터리여야 합니다(또는 "."를 사용하여 현재 디렉터리를 나타냄).
#!/bin/bash
function git_branches()
{
if [[ -z "$1" ]]; then
echo "Usage: $FUNCNAME <dir>" >&2
return 1
fi
if [[ ! -d "$1" ]]; then
echo "Invalid dir specified: '${1}'"
return 1
fi
# Subshell so we don't end up in a different dir than where we started.
(
cd "$1"
for sub in *; do
[[ -d "${sub}/.git" ]] || continue
echo "$sub [$(cd "$sub"; git branch | grep '^\*' | cut -d' ' -f2)]"
done
)
}
이를 자신만의 스크립트로 만들 수도 있고(대체할 수도 있음 $FUNCNAME
) $0
함수 내에 보관하여 스크립트에서 사용할 수 있습니다.
답변2
for dir in */
do (cd $dir && echo "$dir [$(git rev-parse --abbrev-ref HEAD)]")
done
별칭으로도
alias brall='for dir in $(ls -d */);do (cd $dir && echo "$dir [$(git rev-parse --abbrev-ref HEAD)]") ; done'
원하는 것을 (거의) 출력합니다.
project1/ [master]
project2/ [dev]
project3/ [master]
project4/ [master]
답변3
git 디렉터리가 일부 하위 폴더에 있기 때문에 몇 가지 조정을 해야 했습니다. 또한 $1에 지정된 cwd 또는 dir도 지원합니다. 다음은 .bashrc에 추가된 별칭입니다.
git_branches() {
if [[ -z "$1" ]]; then
search_dir=$(pwd)
echo "Using current dir: '${search_dir}'"
else
search_dir=$1
fi
if [[ ! -d "$search_dir" ]]; then
echo "Invalid dir specified: '${search_dir}'"
return 1
fi
# Subshell so we don't end up in a different dir than where we started.
(
cd "$search_dir"
for dir in $(find . -name .git -type d -prune); do
(
cd $dir
echo "$dir [$(git rev-parse --abbrev-ref HEAD)]"
);
done
)
}
답변4
기본 명령은
git branch --show-current
해당 폴더에
따라서 라이너는 다음과 같습니다.
for d in project*; do cd "$d" && b="`git branch --show-current`" && cd - >/dev/null && echo "$d [$b]"; done
별칭으로 만들거나 스크립트에 넣어 명령으로 사용할 수 있습니다.