diff options
-rwxr-xr-x | localgit-remote-init-push | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/localgit-remote-init-push b/localgit-remote-init-push new file mode 100755 index 0000000..5d0ab93 --- /dev/null +++ b/localgit-remote-init-push @@ -0,0 +1,52 @@ +#!/bin/sh + +set -eu + +PRG=$(basename "$0") + +showhelp() { + cat <<EOF +Usage: $PRG PROJECT [GIT_HOST [SSH_CONN]] + +Initialize remote git, push local git, and set as default remote. + + PROJECT basename or relative path for remote git project + + GIT_HOST hostname for public git access + default: "source." + current domainname + + SSH_CONN hostname for ssh, optionally with user prepended + default: GIT_HOST + +Full remote path becomes SSH_USER@SSH_HOST:/srv/git/GIT_HOST/PROJECT.git + +Examples: + $PRG myproject + $PRG some/subproject git.example.org me@shell.example.org + +EOF +} + +exit1() { + echo >&2 "${1:+ERROR: }${1:-Internal error!}" + exit 1 +} + +# parse cmdline options +TEMP="`getopt -s h -l help -n "$PRG" -- "$@"`" || exit1 +eval set -- "$TEMP" +while true; do + case "$1" in + -h|--help) showhelp; exit;; + --) shift; break;; + *) exit1;; + esac +done + +PROJECT=${1-$(showhelp; exit1 "project name missing")} +GIT_HOST=${2:-source.$(dnsdomainname --domain)} +SSH_CONN=${4:+$4@}${3:-$GIT_HOST} + +ssh "$SSH_CONN" git init --bare --shared /srv/git/"$GIT_HOST"/"$PROJECT".git +git remote add origin "$SSH_CONN":/srv/git/"$GIT_HOST"/"$PROJECT".git +git push --set-upstream origin master |