Skip to content

Instantly share code, notes, and snippets.

@gaieges
Created April 5, 2017 21:57
Show Gist options
  • Save gaieges/6544b7cb943d023970b3defef620ff24 to your computer and use it in GitHub Desktop.
Save gaieges/6544b7cb943d023970b3defef620ff24 to your computer and use it in GitHub Desktop.
easier way to use subtrees
#!/bin/bash
set -e
REPOS="$(cat $(dirname $0)/.subtree)"
usage() {
echo "usage: $(basename $0) <command>"
echo "commands are: "
echo " init sets up all remotes and subtrees locally"
echo " this is required for any other actions"
echo ""
echo " pull <ms|'all'> pulls a specific ms, or all configured"
echo " repos from master"
echo ""
echo " push <ms|'all'> pushes a specific ms, or all configured"
echo " repos to master"
exit 0
}
pull_repos() {
selected_ms=${1:-'all'}
if [[ $selected_ms == 'all' ]]; then
repos=$REPOS
else
for ms in $selected_ms; do
repos="$repos $(get_repo_from_ms $ms)"
done
fi
# do pull of selected or all ms's
for repo in $repos; do
ms=$(get_ms_from_repo $repo)
git subtree pull --squash --prefix=$ms/ $ms master
done
}
push_repos() {
ms=${@:-'all'}
if [ $ms == 'all' ]; then
ms=""
for repo in $REPOS; do
ms="$ms $(get_ms_from_repo $repo)"
done
else
repos="$(get_repo_from_ms)"
fi
for m in $ms; do
git subtree push --prefix=$m/ $m $(cd $m ; git rev-parse --abbrev-ref HEAD)
done
}
init_repos() {
for repo in $REPOS; do
ms=$(get_ms_from_repo $repo)
git remote add $ms $repo \
&& git subtree add --squash --prefix=$ms/ $ms master
done
}
set_branch() {
echo not done
}
get_ms_from_repo() {
echo $(echo $1 | sed -E 's/.*\/([a-z]+).git/\1/')
}
get_repo_from_ms() {
echo $(echo $REPOS | grep $1)
}
CMD=${1:-help}
cd $(dirname $0)
case $CMD in
pull)
shift
pull_repos $@
;;
init)
shift
init_repos $@
;;
push)
shift
push_repos $@
;;
setbranch)
shift
set_branch $@
;;
*|help)
usage
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment