Skip to content

Instantly share code, notes, and snippets.

@Blackskyliner
Created December 15, 2015 11:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Blackskyliner/5aae9720c71b668379ba to your computer and use it in GitHub Desktop.
Save Blackskyliner/5aae9720c71b668379ba to your computer and use it in GitHub Desktop.
check-gitversion.sh
#!/bin/bash
function printHelp {
echo """CheckGitHash Agent
Dieses Tool prüft, ob die Version eines lokalen Git-Rrepositories, welches in <dir> liegt, mit der Version von <repoUri> übereinstimmt.
Dabei wird die lokale Version mit dem <branch> von <repoUri> verglichen.
Usage: $0 <dir> <repoUri> [<branch>]
Argumente:
dir - Lokales Git-Repository, welches geprüft werden soll
repoUri - Entferntes Git-Repository, von welchem die aktuelle Version verglichen werden soll
branch - Der Branch des entfernten Git-Repositories, der geprüft werden soll (default: master)
Rückgabewerte:
0 - Versionen sind gleich
1 - Versionen sind unterschiedlich
2 - Prüfung konnte nicht durchgeführt werden
3 - Zu wenig/viele Argumente an die Funktion übergeben"""
}
if [[ $# -ne 3 && $# -ne 2 ]]; then
printHelp;
exit 3;
fi
if [[ $# -eq 2 ]]; then
REMOTE_BRANCH='master'
else
REMOTE_BRANCH=$3
fi
REMOTE_URI=$2
LOCAL_URI=$1
if [[ -e ${LOCAL_URI} ]]; then
# Das lokale Verzeichnis existiert
if [[ -e ${LOCAL_URI}/.git ]]; then
# ... und ist durch GIT verwaltet.
LS_REMOTE=$(git ls-remote "${REMOTE_URI}" "${REMOTE_BRANCH}");
if [[ $? -eq 0 ]]; then
# Der Git Server wurde erreicht und es konnten die Remoterefs ausgelesen werden
LS_HITS=$(echo "${LS_REMOTE}" | wc -l)
if [[ ${LS_HITS} -eq 1 && $(echo ${LS_REMOTE} | wc -c) -gt 1 ]]; then
# Exakt 1 Ergebnis (Remoteref)
REMOTE_HASH=$(echo ${LS_REMOTE} | cut -f 1 -d ' ')
pushd "${LOCAL_URI}" > /dev/null
LOCAL_HASH=$(git log -1 --format="%H")
LOCAL_REPO=$(git rev-parse --abbrev-ref HEAD)
popd > /dev/null
if [[ ${REMOTE_HASH} = ${LOCAL_HASH} ]]; then
exit 0
else
echo -n "(Remote:${REMOTE_BRANCH}) ${REMOTE_HASH:0:8}"
echo " != ${LOCAL_HASH:0:8} (Lokal:${LOCAL_REPO})"
exit 1
fi
elif [[ ${LS_HITS} -eq 1 ]]; then
# Kein Ergenis
echo "Der angegebene Branch '${REMOTE_BRANCH}' existiert nicht unter '${REMOTE_URI}'"
else
# Mehrere Ergenisse (Remoterefs)
echo "Der angegebene Branch '${REMOTE_BRANCH}' für '${REMOTE_URI}' ist mehrdeutig:"
echo "${LS_REMOTE}"
fi
else
echo "'${REMOTE_URI}' ist nicht erreichbar!"
fi
else
echo "'${LOCAL_URI}' ist kein Git Repository!"
fi
else
echo "'${LOCAL_URI}' existiert nicht!"
fi
exit 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment