This is a script for deploying generated files to a git branch, such as when building a single-page app using Yeoman and deploying to GitHub Pages. Unlike the git-subtree approach, it does not require the generated files be committed to the source branch. It keeps a linear history on the deploy branch and does not make superfluous commits or deploys when the generated files do not change.
For an example of use, see X1011/verge-mobile-bingo.
Download the script (wget https://github.com/X1011/git-directory-deploy/raw/master/deploy.sh && chmod +x deploy.sh
) and edit these variables within it as needed to fit your project:
- deploy_directory: root of the tree of files to deploy
- deploy_branch: branch to commit files to and push to origin
- default_username, default_email: identity to use for git commits if none is set already. Useful for CI servers.
- repo: repository to deploy to. Must be readable and writable. The default of "origin" will not work on Travis CI, since it uses the read-only git protocol. In that case, it is recommended to store a GitHub token in a secure environment variable and use it in an HTTPS URL like this:
repo=https://$[email protected]/user/repo.git
Ensure configuration variables are correct in deploy.sh
and run ./deploy.sh -s
Do this every time you want to deploy, or have your CI server do it.
- check out the branch or commit of the source you want to use. The script will use this commit to generate a message when it makes its own commit on the deploy branch.
- generate the files in
deploy_directory
- make sure you have no uncommitted changes in git's index. The script will abort if you do. (It's ok to have uncommitted files in the work tree; the script does not touch the work tree.)
- if
deploy_directory
is a relative path (the default is), make sure you are in the directory you want to resolve against. (For the default, this means you should be in the project's root.) - run
./deploy.sh
-v
, --verbose
: echo commands as they are executed. It is recommended to enable this when running on a CI server, so you can debug if something goes wrong.
-s
, --setup
: perform one-time setup to prepare the repo for deployments. Creates deploy_branch
, initializes it with the contents of deploy_directory
, and pushes it to repo
.
-e
, --allow-empty
: allow deployment of an empty directory. By default, the script will abort if deploy_directory
is empty.