feat(scripts): add git-bare-clone
This commit is contained in:
parent
3af2f96b89
commit
ddd32822b1
34
bin/git-bare-clone
Executable file
34
bin/git-bare-clone
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Creates a new bare clone of a repository with the bare files within a `.bare`
|
||||||
|
# directory. It also sets the origin URL so push and pull work as expected.
|
||||||
|
|
||||||
|
if [[ "$1" == "" ]]; then
|
||||||
|
echo "Usage: ${0##*/} <repository> [<directory>]"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
repository_url="${1}"
|
||||||
|
directory="${2:-}"
|
||||||
|
location=".bare"
|
||||||
|
|
||||||
|
# If no destination directory is specified, get it from the repository URL - the same as "git clone".
|
||||||
|
if [ -z "${directory}" ]; then
|
||||||
|
directory="$(basename -s .git "${repository_url}")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create the parent directory if needed.
|
||||||
|
mkdir -pv "${directory}"
|
||||||
|
cd "${directory}"
|
||||||
|
|
||||||
|
git clone --bare "${repository_url}" "${location}"
|
||||||
|
|
||||||
|
# Adjust origin fetch locations.
|
||||||
|
cd "${location}"
|
||||||
|
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
|
||||||
|
|
||||||
|
# Set .git file contents.
|
||||||
|
cd ..
|
||||||
|
echo "gitdir: ./${location}" > .git
|
Loading…
Reference in a new issue