Skip to content

Instantly share code, notes, and snippets.

@andreav
Created September 19, 2012 12:24
Show Gist options
  • Save andreav/3749371 to your computer and use it in GitHub Desktop.
Save andreav/3749371 to your computer and use it in GitHub Desktop.
git4f - git aliases for automate common every-day develop/integration operations with git (https://github.com/andreav/git4f/wiki)
# Copyright (C) 2012 Andrea Valle
#
# This file is part of git4f.
#
# git4f is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# git4f is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with git4f. If not, see <http://www.gnu.org/licenses/>.
[alias]
#get/set integration branch
intbr = "!f() { [ $# -gt 1 ] && { echo Too many parameters >&2 && exit 2 ;}; \
[ $# -eq 0 ] && { git config 4f.intbr && exit 0 || { echo Integration branch not set >&2 && exit 1 ;}; }; \
git show-ref --quiet --verify \"refs/heads/$1\" || { echo Not a valid branch $1 >&2 && exit 1 ;}; \
git config 4f.intbr $1 ; \
}; f"
intbr-unset = config --unset 4f.intbr
intbr-istracked = "!f() { br_int=$(git intbr) || exit 1; \
u=$(git rev-parse --symbolic-full-name --abbrev-ref $br_int@{upstream} 2>/dev/null) || \
{ echo Integration branch \\'$br_int\\' not tracked >&2 && exit 1 ;} ; \
echo \"$br_int <- $u\"; \
}; f"
intbr-pull = "!f() { git chk-intbr || exit 1; \
d=$(git intbr-istracked 2>&1) && \
{ echo Pulling \\'$(git intbr)\\' && git pull || exit $?;} || \
{ echo Intbr \\'$(git intbr)\\' not tracked, jump pull. ;} \
}; f"
intbr-push = "!f() { git chk-intbr || exit 1; \
d=$(git intbr-istracked) || { echo Cannot push. >&2 && exit 1 ;}; \
remote=$(git config --get branch.$(git intbr).remote); \
echo Pushing \\'$(git intbr)\\' to \\'$remote\\'; \
git push $remote $(git intbr); \
}; f"
#
#switch aliases
chk-intbr = "!git intbr 1>/dev/null && git checkout $(git intbr)"
chk-back = checkout @{-1}
currbr = "!f() { currbr=$(git symbolic-ref -q HEAD) || { echo detached-head >&2 && exit 1 ;}; \
currbr=$(git rev-parse --symbolic-full-name --abbrev-ref $currbr); \
echo $currbr; \
}; f"
#feature branch mgt
ftrbr-start = "!f() { [ $# -ne 1 ] && echo \"Usage: git ftrbr-start <brname>\" >&2 && exit 2; \
br_ftr_pre=$(git config --get 4f.ftrbr-prefix) 2>/dev/null; \
git intbr-pull || exit 1; \
echo Creating new ftr branch starting from \\'$(git intbr)\\'; \
git checkout -b ${br_ftr_pre}$1 \
;}; f"
ftrbr-integrate = "!f() { br_start=$(git currbr) || { echo Cannot integrate. >&2 && exit 1 ;}; \
git intbr-pull || exit 1; \
echo Merging \\'$br_start\\' into \\'$(git intbr)\\'; \
git merge $(git config --get 4f.ftrbr-integrate-merge-opt) $br_start; \
}; f"
ftrbr-integrate-rebase = "!f() { br_start=$(git currbr) || { echo Cannot integrate. >&2 && exit 1 ;}; \
git ftrbr-update-rebase || exit 1; \
git chk-intbr || exit 1; \
echo Merging \\'$br_start\\' into \\'$(git intbr)\\'; \
git merge $(git config --get 4f.ftrbr-integrate-rebase-opt) $br_start; \
}; f"
ftrbr-update-merge = "!f() { br_start=$(git currbr) || { echo Cannot update. >&2 && exit 1 ;}; \
git intbr-pull || exit 1; \
git checkout $br_start || exit 1; \
echo Merging \\'$(git intbr)\\' into \\'$br_start\\'; \
git merge $(git config --get 4f.ftrbr-update-merge-opt) $(git intbr); \
}; f"
ftrbr-update-rebase = "!f() { br_start=$(git currbr) || { echo Cannot update. >&2 && exit 1 ;}; \
git intbr-pull || exit 1; \
git checkout $br_start || exit 1; \
echo Rebasing \\'$br_start\\' onto \\'$(git intbr)\\'; \
git rebase $(git intbr); \
}; f"
ftrbr-push = "!f() { d=$(git intbr-istracked) || { echo Cannot push. >&2 && exit 1 ;}; \
git ftrbr-integrate || exit 1; \
git intbr-push; \
}; f"
ftrbr-push-rebase = "!f() { d=$(git intbr-istracked) || { echo Cannot push. >&2 && exit 1 ;}; \
git ftrbr-integrate-rebase || exit 1; \
git intbr-push; \
}; f"
#configurations
#[4f]
# intbr = master
# ftrbr-prefix = ftr/
# ftrbr-integrate-merge-opt =
# ftrbr-integrate-rebase-opt =
# ftrbr-update-merge-opt = --no-ff
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment