mirror of
https://github.com/actions/checkout.git
synced 2024-12-27 17:45:23 +01:00
Action for checking out a repo
.github/workflows | ||
__test__ | ||
dist | ||
src | ||
.eslintignore | ||
.eslintrc.json | ||
.gitignore | ||
.prettierignore | ||
.prettierrc.json | ||
action.yml | ||
CHANGELOG.md | ||
jest.config.js | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md | ||
tsconfig.json |
Checkout V2
This action checks-out your repository under $GITHUB_WORKSPACE
, so your workflow can access it.
Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth
to fetch more history. Refer here to learn which commit $GITHUB_SHA
points to for different events.
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set persist-credentials: false
to opt-out.
When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.
What's new
- Improved performance
- Fetches only a single commit by default
- Script authenticated git commands
- Auth token persisted in the local git config
- Creates a local branch
- No longer detached HEAD when checking out a branch
- Improved layout
- The input
path
is always relative to $GITHUB_WORKSPACE - Aligns better with container actions, where $GITHUB_WORKSPACE gets mapped in
- The input
- Fallback to REST API download
- When Git 2.18 or higher is not in the PATH, the REST API will be used to download the files
- When using a job container, the container's PATH is used
- Removed input
submodules
Refer here for previous versions.
Usage
- uses: actions/checkout@v2
with:
# Repository name with owner. For example, actions/checkout
# Default: ${{ github.repository }}
repository: ''
# The branch, tag or SHA to checkout. When checking out the repository that
# triggered a workflow, this defaults to the reference or SHA for that event.
# Otherwise, defaults to `master`.
ref: ''
# Auth token used to fetch the repository. The token is stored in the local git
# config, which enables your scripts to run authenticated git commands. The
# post-job step removes the token from the git config. [Learn more about creating
# and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
# Default: ${{ github.token }}
token: ''
# Whether to persist the token in the git config
# Default: true
persist-credentials: ''
# Relative path under $GITHUB_WORKSPACE to place the repository
path: ''
# Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching
# Default: true
clean: ''
# Number of commits to fetch. 0 indicates all history.
# Default: 1
fetch-depth: ''
# Whether to download Git-LFS files
# Default: false
lfs: ''
Scenarios
- Checkout a different branch
- Checkout HEAD^
- Checkout multiple repos (side by side)
- Checkout multiple repos (nested)
- Checkout multiple repos (private)
- Checkout pull request HEAD commit instead of merge commit
- Checkout pull request on closed event
- Checkout submodules
- Checkout private submodules
- Fetch all tags
- Fetch all branches
- Fetch all history for all tags and branches
Checkout a different branch
- uses: actions/checkout@v2
with:
ref: my-branch
Checkout HEAD^
- uses: actions/checkout@v2
with:
fetch-depth: 2
- run: git checkout HEAD^
Checkout multiple repos (side by side)
- name: Checkout
uses: actions/checkout@v2
with:
path: main
- name: Checkout tools repo
uses: actions/checkout@v2
with:
repository: my-org/my-tools
path: my-tools
Checkout multiple repos (nested)
- name: Checkout
uses: actions/checkout@v2
- name: Checkout tools repo
uses: actions/checkout@v2
with:
repository: my-org/my-tools
path: my-tools
Checkout multiple repos (private)
- name: Checkout
uses: actions/checkout@v2
with:
path: main
- name: Checkout private tools
uses: actions/checkout@v2
with:
repository: my-org/my-private-tools
token: ${{ secrets.GitHub_PAT }} # `GitHub_PAT` is a secret that contains your PAT
path: my-tools
${{ github.token }}
is scoped to the current repository, so if you want to checkout a different repository that is private you will need to provide your own PAT.
Checkout pull request HEAD commit instead of merge commit
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
Checkout pull request on closed event
on:
pull_request:
branches: [master]
types: [opened, synchronize, closed]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
Checkout submodules
- uses: actions/checkout@v2
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
Checkout private submodules
- uses: actions/checkout@v2
with:
token: ${{ secrets.MY_GITHUB_PAT }}
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
Fetch all tags
- uses: actions/checkout@v2
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
Fetch all branches
- uses: actions/checkout@v2
- run: |
git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
Fetch all history for all tags and branches
- uses: actions/checkout@v2
- run: |
git fetch --prune --unshallow
License
The scripts and documentation in this project are released under the MIT License