34 lines
		
	
	
	
		
			863 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			863 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |