Last Updated: April 20, 2021
·
27.49K
· barnabyalter

Checkout a single folder from a GitHub repository

Ever wanted to checkout only a single directory or file from a Git repos? Well with some footwork you can as of Git 1.9. Read the documentation for more implementation details and to understand what's going on: https://git-scm.com/docs/git-read-tree.

But here is a quick implementation with bash.

The following will checkout one directory, errors, into a new git directory and subsequently update it (note fast-forward-only merge):

#!/bin/bash

DIR="/apps/errors"
REPOS="git@github.com:username/repository.git"
BRANCH="gh-pages"
CHECKOUT_DIR="errors/"

mkdir -p $DIR
if [ -d "$DIR" ]; then
  cd $DIR
  git init
  git remote add -f origin $REPOS
  git fetch --all
  git config core.sparseCheckout true
  if [ -f .git/info/sparse-checkout]; then
    rm .git/info/sparse-checkout
  fi
  echo $CHECKOUT_DIR >> .git/info/sparse-checkout
  git checkout $BRANCH
  git merge --ff-only origin/$BRANCH
fi

2 Responses
Add your response

Thank you for this very helpful solution!

over 1 year ago ·

Thank you!
To get it working I did have to add a space on the line with

if [ -f .git/info/sparse-checkout]; then

just before the last square bracket so that it became:

if [ -f .git/info/sparse-checkout ]; then

over 1 year ago ·