summaryrefslogtreecommitdiff
path: root/localgit-remote-init-push
blob: c1740ed59c4e981b973ef0db7106d9787eaba38d (plain)
  1. #!/bin/sh
  2. set -eu
  3. PRG=$(basename "$0")
  4. showhelp() {
  5. cat <<EOF
  6. Usage: $PRG PROJECT [GIT_REPO [SSH_CONN [GIT_REMOTE]]]
  7. Initialize remote git, push local git, and set as default remote.
  8. PROJECT basename or relative path for remote git project
  9. GIT_REPO hostname for public git access
  10. default: "source." + current domainname
  11. SSH_CONN hostname for ssh, optionally with user + "@" prepended
  12. default: GIT_REPO
  13. GIT_REMOTE name for local repository set
  14. default: "origin"
  15. Full remote path becomes SSH_USER@SSH_HOST:BASEPATH/PROJECT.git
  16. where BASEPATH is resolved as "/srv/git/" + GIT_REPO
  17. When local repository set is "origin" it is marked as default remote.
  18. Examples:
  19. $PRG myproject
  20. $PRG some/subproject git.example.org me@shell.example.org
  21. EOF
  22. }
  23. exit1() {
  24. echo >&2 "${1:+ERROR: }${1:-Internal error!}"
  25. exit 1
  26. }
  27. # parse cmdline options
  28. TEMP="`getopt -s sh -o h -l help -n "$PRG" -- "$@"`" || exit1
  29. eval set -- "$TEMP"
  30. while true; do
  31. case "$1" in
  32. -h|--help) showhelp; exit;;
  33. --) shift; break;;
  34. *) exit1;;
  35. esac
  36. done
  37. PROJECT=${1-$(showhelp; exit1 "project name missing")}
  38. GIT_REPO=${2:-source.$(dnsdomainname --domain)}
  39. GIT_HOST=$GIT_REPO
  40. BASEPATH=/srv/git/"$GIT_REPO"
  41. SSH_CONN=${3:-$GIT_HOST}
  42. GIT_REMOTE=${4:-origin}
  43. [ origin != "$GIT_ORIGIN" ] || ORIGIN_IS_DEFAULT=yes
  44. ssh "$SSH_CONN" git init --bare --shared "$BASEPATH"/"$PROJECT".git
  45. git remote add "$GIT_REMOTE" "$SSH_CONN":"$BASEPATH"/"$PROJECT".git
  46. git push ${ORIGIN_IS_DEFAULT:+--set-upstream "$GIT_REMOTE"} master