Binary & Large Files
Copia is a Git-based distributed version control system. As such, any change to a binary file will be recognized by Git as a change to the entire file (versus a text file, which just stores the difference). This can increase the amount of data that needs to be stored, since the whole file needs to be replicated for each revision. Compounded by the fact that some files can be quite large, this issue can be taxing on disk space, causing slow performance during cloning, fetching, pulling, and other operations.
Copia has solved this problem by installing Git-LFS for customer usage and pre-configuring it for known filetypes.
Repositories created prior to August 2022 (or created based on a template repository before that time) are not automatically configured for Git-LFS. In addition, repositories migrated into Copia are not automatically configured for Git-LFS. These repositories must be migrated manually.
Git-LFS implements very small pointers to the actual binary/large files, saving space and addressing most performance issues. From a user standpoint, this is all done "behind the scenes" and so you shouldn't notice any difference in usage.
File renames are discouraged when using Git-LFS as they will be considered a removal of one file and an addition of a new file in its place.
When a new repository is created in Copia and it is already Git-LFS enabled, a
.gitattributesfile is automatically created for generic filetypes. The
.gitattributesfile also acknowledges vendor-specific filetypes (such as Rockwell
.acdfiles and Siemens
.zap##files). A snippet of this file is provided below.
# Copia LFS defaults
*.[xX][mM][lL] filter=lfs diff=lfs merge=lfs -text
*.[zZ][iI][pP] filter=lfs diff=lfs merge=lfs -text
## Rockwell: Studio 5000/Logix Designer
*.[aA][cC][dD] filter=lfs diff=lfs merge=lfs -text
*.[lL]5[kK] filter=lfs diff=lfs merge=lfs -text
*.[lL]5[xX] filter=lfs diff=lfs merge=lfs -text
## Siemens: TIA
*.[zZ][aA][lL]14 filter=lfs diff=lfs merge=lfs -text
To configure Git-LFS for a new filetype that is not already tracked by Git-LFS, you must add an entry in the
.gitattributesfile in your repository. You can also use the Git CLI to add an extension, such as:
git lfs track "*.xyz"
git lfs track "*.XYZ"
Once added, the next time you commit and push that filetype, it will be managed by Git-LFS.
Copia is case-sensitive. When adding a file type to your
.gitattributesfile, it is recommended to add it directly, using an existing and example line item, to cover all cases.
When Git-LFS is involved, migration involves either of the following processes:
- migrating a repository which is not previously Git-LFS enabled
- migrating a repository from another vendor to Copia that is already configured for Git-LFS
We recommend you contact Copia for assistance while we continue to add additional documentation, guidance, and features surrounding these use-cases.
Git-LFS stores older versions of the file as pointers instead of the entire file itself. Because of this, you can't always access check out older commits if you don't have an internet connection. Prior to using your Git-LFS repository without an internet connection, you can cache all of the LFS items locally by running the following command from the Git-CLI while an internet connection is still established:
git lfs fetch --all