#!/bin/bash
# Desc: Initializes a git repository
+#==BEGIN Define script parameters==
+#===BEGIN Declare local script functions===
yell() { echo "$0: $*" >&2; } #o Yell, Die, Try Three-Fingered Claw technique
die() { yell "$*"; exit 111; } #o Ref/Attrib: https://stackoverflow.com/a/25515370
try() { "$@" || die "cannot $*"; } #o
# arg2: repoDir
# arg3: remoteName
# arg4: branchName
- # Version: 0.0.4
+ # Version: 0.0.9
# Depends: checkURL() 0.0.2, yell(), Bash 5.0.3
# Ref/Attrib: [1]: Test for space-less alphanuemric string. https://unix.stackexchange.com/a/416120
# [2]: Test for argument count. https://stackoverflow.com/q/18568706
# [3]: Test if dir is (in) git repository. https://stackoverflow.com/a/39518382
+ # Note: Pulls use '--ff-only' option which requires an upstream branch be set.
+ # This can be done by using:
+ # $ git branch --set-upstream-to origin/master master
+ #
#==BEGIN Validate input arguments==
arg1="$1";
arg2="$2";
if checkURL "$arg1"; then repoURL="$arg1";
else yell "ERROR:Not a valid URL:$arg1"; return 1; fi;
+ # Passthrough repoDir (it may not exist yet)
+ repoDir="$arg2";
+
# Validate remoteName
if [[ "$arg3" =~ ^[[:alnum:]]+$ ]]; then remoteName="$arg3";
else yell "ERROR:Not a valid remote name:$arg3"; return 1; fi; # See [1].
else
yell "STATUS:Already a git repository:$repoDir";
git status; git remote -v;
- yell "STATUS:Pausing 4 seconds..."; sleep 4;
fi;
yell "STATUS:Adding $repoURL as remote $remoteName";
git remote add "$remoteName" "$repoURL";
+ git branch --set-upstream-to "$remoteName"/"$branchName" "$branchName";
yell "STATUS:Pulling branch $branchName from remote $remoteName";
- git pull "$remoteName" "$branchName";
+ git pull --ff-only "$remoteName" "$branchName";
+ git fetch "$remoteName";
unset repoURL repoDir remoteName branchName;
popd || exit 1;
#==END create and populate git repository==
+ yell "================================";
} # Init Git Repository
+#===END Declare local script functions===
+#==END Define script parameters==
-#==BEGIN test code
+#==BEGIN sample code
tmpDir=/tmp/"$(date +%Y%m%dT%H%M%S%z)";
mkdir -p "$tmpDir";
pushd "$tmpDir" || exit 1;
unset repoURL repoDir remoteName branchName;
yell "STATUS:Done.";
-#==END test code
+#==END sample code
+
+# Author: Steven Baltaktei Sandoval
+# License: GPLv3+