Don't ever commit binary files to Git! Or what to do if you do.
4 stars based on
Git is great at keeping the footprint of your source code small because the differences between versions are easily picked out and code is easily compressed. Large files that don't compress well and change entirely between versions such as binaries present problems when stored in your Git repos. Git's fast performance comes from its ability to address and switch to all versions of a file from its local storage. If you have large, undiffable files in your repo such as binaries, you will keep a full copy of that file in your repo every time you commit a change to the file.
If many versions of these files exist in your repo, they will dramatically increase the time to checkout, branch, fetch, and clone your code. As your team works with editors and tools to create and update files, you should put these files into Git so your team can enjoy the benefits of Git's workflow.
Don't commit other types of files, such as DLLs, library files, and other dependencies that aren't created by your team but your code depends on into your repo.
Deliver these files through package management to your systems. Package management bundles your dependencies how to manage binary assets with git installs the files on your system when you deploy the package. Packages are versioned to ensure that code tested in one environment runs the same in another environment as long as they have the same installed packages.
Don't commit the binaries, logs, tracing output or diagnostic data from your builds and tests. These are outputs from your code, not the source code itself. Share logs and trace information with your how to manage binary assets with git through work item tracking tools or through team file sharing.
Binary source files that are infrequently updated will have relatively few versions committed, and will not take up very much space provided that their file size is small. Images for the web, icons, and other smaller art assets can fall into this category. It's better to store these files in Git with the rest of your source so your team can use consistent workflow.
Even small binaries can cause problems if updated often. One hundred changes to a KB binary file uses up as much storage as 10 changes to a 1MB binary, and due to the frequency of updates to the smaller binary will take slow down branching performance more often than the large binary. Git will how to manage binary assets with git one main version of a file and then store only the differences from that version in a process known as deltification. Deltification and file compression allow Git to store your entire code history in your local repo.
Large binaries usually change entirely between versions and how to manage binary assets with git often already compressed, making these files difficult for Git to manage since the difference between versions is very large. Git must store the entire contents of each version of the file and has difficulty saving space through deltification and compression. Storing the full file versions of these files causes repo size to increase over time, reducing branching performance, increasing the clone times, and expanding storage requirements.
When you have source files with large differences between versions and frequent updates, you can use Git LFS to manage these file types. Git LFS is an extension to Git which commits data describing the large files in a commit to your repo, and stores the binary file contents into separate remote storage.
When you clone and switch branches in your repo, Git LFS downloads the correct version from that remote storage. Your local development tools will transparently work how to manage binary assets with git the files as if they were commited directly to your repo.
The benefit of Git LFS is that your team can use the familiar end to end Git workflow no matter what files your team creates. LFS files can be as big as you need them to be. Additionally, as of version 2. Just follow the instructions to install the clientset up LFS tracking for files on your local repo, and then push your changes to VSTS. The file written into your repo for a Git LFS tracked file will have a few lines with a key and value pair on each line:.
If you use a version of LFS below 2. This step is no longer necessary as of LFS 2. Our new feedback system how to manage binary assets with git built on GitHub Issues. For more information on this change, please read our blog post. What kind of files should you store in Git? Source code-not dependencies As your team works with editors and tools to create and update files, you should put these files into Git so your team can enjoy the benefits of Git's workflow.
Don't commit outputs Don't commit the binaries, logs, tracing output or diagnostic data from your builds and tests. Store small, infrequently updated binary sources in Git Binary source files that are infrequently updated will have relatively few versions committed, and will not take up very much space provided that their file size is small.
Important Even small binaries can cause problems if updated often. What type of feedback would you like to provide? Give product feedback Sign in to give documentation feedback Give documentation feedback Our new feedback system is built on GitHub Issues.