Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Managing local and online repositories

The Repository class is a helper class that wraps git and git-lfs commands. It provides tooling adapted for managing repositories which can be very large.

It is the recommended tool as soon as any git operation is involved, or when collaboration will be a point of focus with the repository itself.

The Repository class

class huggingface_hub.Repository

< >

( local_dir: str clone_from: typing.Optional[str] = None repo_type: typing.Optional[str] = None use_auth_token: typing.Union[bool, str] = True git_user: typing.Optional[str] = None git_email: typing.Optional[str] = None revision: typing.Optional[str] = None private: bool = False skip_lfs_files: bool = False client: typing.Optional[huggingface_hub.hf_api.HfApi] = None )

Helper class to wrap the git and git-lfs commands.

The aim is to facilitate interacting with huggingface.co hosted model or dataset repos, though not a lot here (if any) is actually specific to huggingface.co.

__init__

< >

( local_dir: str clone_from: typing.Optional[str] = None repo_type: typing.Optional[str] = None use_auth_token: typing.Union[bool, str] = True git_user: typing.Optional[str] = None git_email: typing.Optional[str] = None revision: typing.Optional[str] = None private: bool = False skip_lfs_files: bool = False client: typing.Optional[huggingface_hub.hf_api.HfApi] = None )

Parameters

  • local_dir (str) — path (e.g. 'my_trained_model/') to the local directory, where the Repository will be initalized.
  • clone_from (str, optional) — repository url (e.g. 'https://huggingface.co/philschmid/playground-tests').
  • repo_type (str, optional) — To set when creating a repo: et to “dataset” or “space” if creating a dataset or space, default is model.
  • use_auth_token (str or bool, optional, defaults to True) — huggingface_token can be extract from HfApi().login(username, password) and is used to authenticate against the hub (useful from Google Colab for instance).
  • git_user (str, optional) — will override the git config user.name for committing and pushing files to the hub.
  • git_email (str, optional) — will override the git config user.email for committing and pushing files to the hub.
  • revision (str, optional) — Revision to checkout after initializing the repository. If the revision doesn’t exist, a branch will be created with that revision name from the default branch’s current HEAD.
  • private (bool, optional, defaults to False) — whether the repository is private or not.
  • skip_lfs_files (bool, optional, defaults to False) — whether to skip git-LFS files or not.
  • client (HfApi, optional) — Instance of HfApi to use when calling the HF Hub API. A new instance will be created if this is left to None.

Instantiate a local clone of a git repo.

If specifying a clone_from, it will clone an existing remote repository, for instance one that was previously created using HfApi().create_repo(repo_id=repo_name).

Repository uses the local git credentials by default, but if required, the huggingface_token as well as the git user and the email can be explicitly specified.

current_branch

< >

( ) str

Returns

str

Current checked out branch.

Returns the current checked out branch.

add_tag

< >

( tag_name: str message: str = None remote: typing.Optional[str] = None )

Parameters

  • tag_name (str) — The name of the tag to be added.
  • message (str, optional) — The message that accompanies the tag. The tag will turn into an annotated tag if a message is passed.
  • remote (str, optional) — The remote on which to add the tag.

Add a tag at the current head and push it

If remote is None, will just be updated locally

If no message is provided, the tag will be lightweight. if a message is provided, the tag will be annotated.

auto_track_binary_files

< >

( pattern: typing.Optional[str] = '.' ) List[str]

Parameters

  • pattern (str, optional, defaults to ”.“) — The pattern with which to track files that are binary.

Returns

List[str]

List of filenames that are now tracked due to being binary files

Automatically track binary files with git-lfs.

auto_track_large_files

< >

( pattern: typing.Optional[str] = '.' ) List[str]

Parameters

  • pattern (str, optional, defaults to ”.“) — The pattern with which to track files that are above 10MBs.

Returns

List[str]

List of filenames that are now tracked due to their size.

Automatically track large files (files that weigh more than 10MBs) with git-lfs.

check_git_versions

< >

( )

Checks that git and git-lfs can be run.

clone_from

< >

( repo_url: str use_auth_token: typing.Union[bool, str, NoneType] = None )

Parameters

  • repo_url (str) — The URL from which to clone the repository
  • use_auth_token (Union[str, bool], optional) — Whether to use the authentication token. It can be:
    • a string which is the token itself
    • False, which would not use the authentication token
    • True, which would fetch the authentication token from the local folder and use it (you should be logged in for this to work).
    • None, which would retrieve the value of self.huggingface_token.

Clone from a remote. If the folder already exists, will try to clone the repository within it.

If this folder is a git repository with linked history, will try to update the repository.

commit

< >

( commit_message: str branch: typing.Optional[str] = None track_large_files: typing.Optional[bool] = True blocking: typing.Optional[bool] = True auto_lfs_prune: typing.Optional[bool] = False )

Parameters

  • commit_message (str) — Message to use for the commit.
  • branch (str, optional) — The branch on which the commit will appear. This branch will be checked-out before any operation.
  • track_large_files (bool, optional, defaults to True) — Whether to automatically track large files or not. Will do so by default.
  • blocking (bool, optional, defaults to True) — Whether the function should return only when the git push has finished.
  • auto_lfs_prune (bool, defaults to True) — Whether to automatically prune files once they have been pushed to the remote.

Context manager utility to handle committing to a repository. This automatically tracks large files (>10Mb) with git-lfs. Set the track_large_files argument to False if you wish to ignore that behavior.

Examples:

>>> with Repository(
...     "text-files",
...     clone_from="<user>/text-files",
...     use_auth_token=True,
>>> ).commit("My first file :)"):
...     with open("file.txt", "w+") as f:
...         f.write(json.dumps({"hey": 8}))

>>> import torch

>>> model = torch.nn.Transformer()
>>> with Repository(
...     "torch-model",
...     clone_from="<user>/torch-model",
...     use_auth_token=True,
>>> ).commit("My cool model :)"):
...     torch.save(model.state_dict(), "model.pt")

delete_tag

< >

( tag_name: str remote: typing.Optional[str] = None ) bool

Parameters

  • tag_name (str) — The tag name to delete.
  • remote (str, optional) — The remote on which to delete the tag.

Returns

bool

True if deleted, False if the tag didn’t exist. If remote is not passed, will just be updated locally

Delete a tag, both local and remote, if it exists

git_add

< >

( pattern: typing.Optional[str] = '.' auto_lfs_track: typing.Optional[bool] = False )

Parameters

  • pattern (str, optional, defaults to ”.“) — The pattern with which to add files to staging.
  • auto_lfs_track (bool, optional, defaults to False) — Whether to automatically track large and binary files with git-lfs. Any file over 10MB in size, or in binary format, will be automatically tracked.

git add

Setting the auto_lfs_track parameter to True will automatically track files that are larger than 10MB with git-lfs.

git_checkout

< >

( revision: str create_branch_ok: typing.Optional[bool] = False )

Parameters

  • revision (str) — The revision to checkout.
  • create_branch_ok (str, optional, defaults to False) — Whether creating a branch named with the revision passed at the current checked-out reference if revision isn’t an existing revision is allowed.

git checkout a given revision

Specifying create_branch_ok to True will create the branch to the given revision if that revision doesn’t exist.

git_commit

< >

( commit_message: str = 'commit files to HF hub' )

Parameters

  • commit_message (str, optional, defaults to “commit files to HF hub”) — The message attributed to the commit.

git commit

git_config_username_and_email

< >

( git_user: typing.Optional[str] = None git_email: typing.Optional[str] = None )

Parameters

  • git_user (str, optional) — The username to register through git.
  • git_email (str, optional) — The email to register through git.

Sets git username and email (only in the current repo).

git_credential_helper_store

< >

( )

Sets the git credential helper to store

git_head_commit_url

< >

( ) str

Returns

str

The URL to the current checked-out commit.

Get URL to last commit on HEAD. We assume it’s been pushed, and the url scheme is the same one as for GitHub or HuggingFace.

git_head_hash

< >

( ) str

Returns

str

The current checked out commit SHA.

Get commit sha on top of HEAD.

git_pull

< >

( rebase: typing.Optional[bool] = False lfs: typing.Optional[bool] = False )

Parameters

  • rebase (bool, optional, defaults to False) — Whether to rebase the current branch on top of the upstream branch after fetching.
  • lfs (bool, optional, defaults to False) — Whether to fetch the LFS files too. This option only changes the behavior when a repository was cloned without fetching the LFS files; calling repo.git_pull(lfs=True) will then fetch the LFS file from the remote repository.

git pull

git_push

< >

( upstream: typing.Optional[str] = None blocking: typing.Optional[bool] = True auto_lfs_prune: typing.Optional[bool] = False )

Parameters

  • upstream (str, optional) — Upstream to which this should push. If not specified, will push to the lastly defined upstream or to the default one (origin main).
  • blocking (bool, optional, defaults to True) — Whether the function should return only when the push has finished. Setting this to False will return an CommandInProgress object which has an is_done property. This property will be set to True when the push is finished.
  • auto_lfs_prune (bool, optional, defaults to False) — Whether to automatically prune files once they have been pushed to the remote.

git push

If used without setting blocking, will return url to commit on remote repo. If used with blocking=True, will return a tuple containing the url to commit and the command object to follow for information about the process.

git_remote_url

< >

( ) str

Returns

str

The URL of the origin remote.

Get URL to origin remote.

is_repo_clean

< >

( ) bool

Returns

bool

True if the git status is clean, False otherwise.

Return whether or not the git status is clean or not

lfs_enable_largefiles

< >

( )

HF-specific. This enables upload support of files >5GB.

lfs_prune

< >

( recent = False )

Parameters

  • recent (bool, optional, defaults to False) — Whether to prune files even if they were referenced by recent commits. See the following link for more information.

git lfs prune

lfs_track

< >

( patterns: typing.Union[str, typing.List[str]] filename: typing.Optional[bool] = False )

Parameters

  • patterns (Union[str, List[str]]) — The pattern, or list of patterns, to track with git-lfs.
  • filename (bool, optional, defaults to False) — Whether to use the patterns as literal filenames.

Tell git-lfs to track files according to a pattern.

Setting the filename argument to True will treat the arguments as literal filenames, not as patterns. Any special glob characters in the filename will be escaped when writing to the .gitattributes file.

lfs_untrack

< >

( patterns: typing.Union[str, typing.List[str]] )

Parameters

  • patterns (Union[str, List[str]]) — The pattern, or list of patterns, to untrack with git-lfs.

Tell git-lfs to untrack those files.

list_deleted_files

< >

( ) List[str]

Returns

List[str]

A list of files that have been deleted in the working directory or index.

Returns a list of the files that are deleted in the working directory or index.

push_to_hub

< >

( commit_message: typing.Optional[str] = 'commit files to HF hub' blocking: typing.Optional[bool] = True clean_ok: typing.Optional[bool] = True auto_lfs_prune: typing.Optional[bool] = False )

Parameters

  • commit_message (str) — Message to use for the commit.
  • blocking (bool, optional, defaults to True) — Whether the function should return only when the git push has finished.
  • clean_ok (bool, optional, defaults to True) — If True, this function will return None if the repo is untouched. Default behavior is to fail because the git command fails.
  • auto_lfs_prune (bool, optional, defaults to False) — Whether to automatically prune files once they have been pushed to the remote.

Helper to add, commit, and push files to remote repository on the HuggingFace Hub. Will automatically track large files (>10MB).

tag_exists

< >

( tag_name: str remote: typing.Optional[str] = None ) bool

Parameters

  • tag_name (str) — The name of the tag to check.
  • remote (str, optional) — Whether to check if the tag exists on a remote. This parameter should be the identifier of the remote.

Returns

bool

Whether the tag exists.

Check if a tag exists or not.

wait_for_commands

< >

( )

Blocking method: blocks all subsequent execution until all commands have been processed.

Helper methods

huggingface_hub.repository.is_git_repo

< >

( folder: typing.Union[str, pathlib.Path] ) bool

Parameters

  • folder (str) — The folder in which to run the command.

Returns

bool

True if the repository is part of a repository, False otherwise.

Check if the folder is the root or part of a git repository

huggingface_hub.repository.is_local_clone

< >

( folder: typing.Union[str, pathlib.Path] remote_url: str ) bool

Parameters

  • folder (str or Path) — The folder in which to run the command.
  • remote_url (str) — The url of a git repository.

Returns

bool

True if the repository is a local clone of the remote repository specified, False otherwise.

Check if the folder is a local clone of the remote_url

huggingface_hub.repository.is_tracked_with_lfs

< >

( filename: typing.Union[str, pathlib.Path] ) bool

Parameters

  • filename (str or Path) — The filename to check.

Returns

bool

True if the file passed is tracked with git-lfs, False otherwise.

Check if the file passed is tracked with git-lfs.

huggingface_hub.repository.is_git_ignored

< >

( filename: typing.Union[str, pathlib.Path] ) bool

Parameters

  • filename (str or Path) — The filename to check.

Returns

bool

True if the file passed is ignored by git, False otherwise.

Check if file is git-ignored. Supports nested .gitignore files.

huggingface_hub.repository.files_to_be_staged

< >

( pattern: str folder: typing.Union[str, pathlib.Path] ) List[str]

Parameters

  • pattern (str or Path) — The pattern of filenames to check. Put . to get all files.
  • folder (str or Path) — The folder in which to run the command.

Returns

List[str]

List of files that are to be staged.

Returns a list of filenames that are to be staged.

huggingface_hub.repository.is_tracked_upstream

< >

( folder: typing.Union[str, pathlib.Path] ) bool

Parameters

  • folder (str or Path) — The folder in which to run the command.

Returns

bool

True if the current checked-out branch is tracked upstream, False otherwise.

Check if the current checked-out branch is tracked upstream.

huggingface_hub.repository.commits_to_push

< >

( folder: typing.Union[str, pathlib.Path] upstream: typing.Optional[str] = None ) int

Parameters

  • folder (str or Path) — The folder in which to run the command.
  • upstream (str, optional) —

Returns

int

Number of commits that would be pushed upstream were a git push to proceed.

Check the number of commits that would be pushed upstream

The name of the upstream repository with which the comparison should be made.

Following asynchronous commands

The Repository utility offers several methods which can be launched asynchronously:

  • git_push
  • git_pull
  • push_to_hub
  • The commit context manager

See below for utilities to manage such asynchronous methods.

class huggingface_hub.Repository

< >

( local_dir: str clone_from: typing.Optional[str] = None repo_type: typing.Optional[str] = None use_auth_token: typing.Union[bool, str] = True git_user: typing.Optional[str] = None git_email: typing.Optional[str] = None revision: typing.Optional[str] = None private: bool = False skip_lfs_files: bool = False client: typing.Optional[huggingface_hub.hf_api.HfApi] = None )

Helper class to wrap the git and git-lfs commands.

The aim is to facilitate interacting with huggingface.co hosted model or dataset repos, though not a lot here (if any) is actually specific to huggingface.co.

commands_failed

< >

( )

Returns the asynchronous commands that failed.

commands_in_progress

< >

( )

Returns the asynchronous commands that are currently in progress.

wait_for_commands

< >

( )

Blocking method: blocks all subsequent execution until all commands have been processed.

class huggingface_hub.repository.CommandInProgress

< >

( title: str is_done_method: typing.Callable status_method: typing.Callable process: Popen post_method: typing.Optional[typing.Callable] = None )

Utility to follow commands launched asynchronously.