#!/bin/bash set -euo pipefail # this script creates a bare git repository on the git server # # USAGE: # ssh git@ new-repo [--description ] # # EXAMPLES: # ssh git@treybastian.com new-repo myrepo # ssh git@treybastian.com new-repo myrepo.git # ssh git@treybastian.com new-repo myrepo --description "my cool repo" usage() { echo "Usage: new-repo [--description ]" echo "" echo "Examples:" echo " new-repo myrepo" echo " new-repo myrepo.git" echo " new-repo myrepo --description \"my cool repo\"" exit 1 } if [ "$#" -lt 1 ]; then echo "Error: expected at least 1 argument, got $#" usage fi PROJECT_NAME="$1" DESCRIPTION="" shift while [ "$#" -gt 0 ]; do case "$1" in --description) [ "$#" -ge 2 ] || { echo "Error: --description requires a value"; usage; } DESCRIPTION="$2" shift 2 ;; *) echo "Error: unknown flag '$1'" usage ;; esac done if [[ "$PROJECT_NAME" != *.git ]]; then PROJECT_NAME="${PROJECT_NAME}.git" fi if [ -d "$PROJECT_NAME" ]; then echo "Error: '$PROJECT_NAME' already exists" exit 1 fi git --bare init "$PROJECT_NAME" if [ -n "$DESCRIPTION" ]; then echo "$DESCRIPTION" > "${PROJECT_NAME}/description" fi echo "repo created: $PROJECT_NAME" echo "git url: ${USER}@${HOSTNAME}:${PROJECT_NAME}" # vim: filetype=bash