Nachdem ich viele Antworten und Beiträge gelesen und einen halben Tag damit verbracht habe, verschiedene Varianten auszuprobieren, bin ich zu folgendem Ergebnis gekommen.
Wenn Sie mit Windows arbeiten, können Sie dieses Skript unter Windows mit Git Bash ausführen, das von Git für Windows bereitgestellt wird (installiert oder portabel).
Dieses Skript benötigt Argumente
\- local path e.g. /d/source/project1
- Git URL e.g. https://username@bitbucket.org/username/project1.git
- password
if a password should not be entered on the command line in plain text,
then modify the script to check if GITPASS is empty; do not
replace and let Git prompt for a password
Das Skript wird
- Find the current branch
- Get the SHA1 of the remote on that branch
- Get the SHA1 of the local on that branch
- Compare them.
Wenn das Skript eine Änderung anzeigt, können Sie mit dem Abrufen oder Ziehen fortfahren. Das Skript ist vielleicht nicht effizient, aber für mich erledigt es die Arbeit.
Update - 30.10.2015: stderr zu dev null, um zu verhindern, dass die URL mit dem Passwort auf der Konsole ausgegeben wird.
#!/bin/bash
# Shell script to check if a Git pull is required.
LOCALPATH=$1
GITURL=$2
GITPASS=$3
cd $LOCALPATH
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
echo
echo git url = $GITURL
echo branch = $BRANCH
# Bash replace - replace @ with :password@ in the GIT URL
GITURL2="${GITURL/@/:$GITPASS@}"
FOO="$(git ls-remote $GITURL2 -h $BRANCH 2> /dev/null)"
if [ "$?" != "0" ]; then
echo cannot get remote status
exit 2
fi
FOO_ARRAY=($FOO)
BAR=${FOO_ARRAY[0]}
echo [$BAR]
LOCALBAR="$(git rev-parse HEAD)"
echo [$LOCALBAR]
echo
if [ "$BAR" == "$LOCALBAR" ]; then
#read -t10 -n1 -r -p 'Press any key in the next ten seconds...' key
echo No changes
exit 0
else
#read -t10 -n1 -r -p 'Press any key in the next ten seconds...' key
#echo pressed $key
echo There are changes between local and remote repositories.
exit 1
fi
16 Stimmen
Bitte beachten Sie: "git pull --dry-run" funktioniert nicht so, wie vermutlich erwartet. Es scheint, dass git pull unbekannte Optionen direkt an git fetch weitergibt. Das Ergebnis ist das eines normalen git pull.
34 Stimmen
"pull" ist nur ein kurzer Weg, um "fetch" und "merge" auf einmal zu machen, wenn Sie den Status der entfernten Repo überprüfen müssen, simulieren Sie wirklich ein "fetch". Also
git fetch -v --dry-run
ist das, was Sie brauchen.0 Stimmen
Ich habe die von OP vorgeschlagene Lösung ausprobiert, und es hat nichts gebracht. Wahrscheinlich nicht der beste Ansatz?