Last active
August 22, 2022 16:01
-
-
Save markstinson/a6fa4882de7660a1f91f7153dfb0405b to your computer and use it in GitHub Desktop.
Personal ssh+git repository -- no gitolite3, gitea, gogs, gitlab -- just the minimal
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# I call this script ~/bin/mkgitrepo.sh | |
# You could make a git:git if desired -- gitolite3 without management. | |
# Make sure your SSH Keys are set as necessary. | |
# If you want a differnt set of keys just for git, make sure the | |
# pub keys are added/removed from your ~/.ssh/authorized_keys | |
my_new_repo="${1}" | |
# for legacy hostname lacking fqdn switch | |
this_host=$(hostname -f 2> /dev/null) || this_host=$(hostname) | |
homedir=~ | |
gitdir=git # where you bare repos reside, like a project | |
srcdir=src # where you'll check out repo to | |
gitpath=${homedir}/${gitdir} # or whatever path/to/use | |
srcpath=${homedir}/${srcdir} # or prj or whatever path/to/use | |
usage=" | |
Usage: $0 reponame | |
Purpose: make a personal ssh+git repo in your central SSH homedir | |
Just re-run when you want to make a new repo. | |
Repo should be [0-9A-Za-z_-] and not lead with a symbol | |
" | |
[[ -z ${my_new_repo} ]] || [[ ${my_new_repo} == "-h" ]] && echo "${usage}" && exit | |
anykey() { | |
echo | |
read -p "Press Enter to continue or Ctrl+C to abort" junkvar | |
echo | |
} | |
get_set_user_email(){ | |
[[ $(git config user.name) ]] || git config --global user.name "${USER}" | |
[[ $(git config user.email) ]] || git config --global user.email "${USER}@${this_host}" | |
echo "[ info ] Confirming ~/.gitconfig . Edit if necessary." | |
cat ~/.gitconfig | |
echo | |
} | |
mygit_mkrepo() { | |
echo "[ info ] Creating new repo: ${my_new_repo}" | |
[[ ! -d ${gitpath} ]] \ | |
&& echo "[ info ] Creating ${gitpath}" \ | |
&& mkdir ${gitpath} | |
cd ${gitpath} | |
git init --bare ${my_new_repo}.git | |
[[ $? ]] \ | |
&& echo "[ info ] Created: $(ls -ld ${my_new_repo}.git)" \ | |
|| { echo "[ err ] Failure to create: ${my_new_repo}"; exit; } | |
echo | |
} | |
mygit_initialize() { | |
echo "[ info ] Initializing with README.md" | |
[[ ! -d ${srcpath} ]] \ | |
&& echo "[ info ] Creating ${srcpath}" \ | |
&& mkdir ${srcpath} | |
cd ${srcpath} | |
# Open a ssh+git connection back on itself just to set up a README.md | |
# no need to deal with branches yet so use the master branch | |
echo "[ info ] Cloning ${my_new_repo}" | |
echo | |
git clone ${USER}@${this_host}:${gitpath}/${my_new_repo}.git | |
cd ${my_new_repo} | |
echo | |
echo "[ info ] Adding and commiting README.md" | |
echo "initial README" > README.md | |
git add README.md | |
git commit -m "added inital readme" | |
echo | |
echo "[ info ] Pushing README.md" | |
git push origin master | |
} | |
finish_info() { | |
echo " | |
If you wish to make another, just re-run the script with a new repo name. | |
Repo '${my_new_repo}' is created and initialized. | |
On your remote host, do the following: | |
mkdir ~/${srcdir} # or prj or whatever | |
cd ~/${srcdir} | |
git clone ${USER}@${this_host}:${gitdir}/${my_new_repo}.git | |
cd ${my_new_repo} | |
# have fun doing git business | |
If you wish to make things a smidge easier, particularly if using alternate SSH keys, | |
you can do the following as well: | |
hostalias=gitserver # or whatever | |
echo \" | |
host \${hostalias} | |
user ${USER} | |
hostname ${this_host} | |
port 22 | |
identityfile ~/.ssh/id_rsa # or whatever optional private key | |
\" >> ~/.ssh/config | |
chmod 600 ~/.ssh/config | |
" | |
} | |
# Comment out or delete anykey if that is not your thing | |
get_set_user_email | |
anykey | |
mygit_mkrepo | |
anykey | |
mygit_initialize | |
anykey | |
finish_info |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment