You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

setup_filestore.mkd 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. ## Configure Git Large File Storage
  2. Gitblit provides a filestore that supports the [Git Large File Storage (LFS) API](https://git-lfs.github.com/).
  3. ### Server Configuration
  4. Gitblit is configured to work straight away. However you may want to update the following in `gitblit.properties`:
  5. <table class="table">
  6. <thead>
  7. <tr><th>parameter</th><th>value</th><th>description</th></tr>
  8. </thead>
  9. <tbody>
  10. <tr>
  11. <th>filestore.storageFolder</th><td>${baseFolder}/lfs</td>
  12. <td>The path on the server where filestore objects are to be saved.</td>
  13. </tr>
  14. <tr>
  15. <th>filestore.maxUploadSize</th><td>-1</td>
  16. <td>The maximum allowable size that can be uploaded to the filestore. Once a file is uploaded it will be unaffected by later changes in this property. The default of -1 indicates no limits.</td>
  17. </tr>
  18. </tbody>
  19. </table>
  20. ### Limitations
  21. Gitblit currently provides a server-only implementation of the opensource Git LFS API.
  22. 1. Files in the filestore are not currently searchable by Lucene.
  23. 2. Mirroring a repository that uses Git LFS will only mirror the pointer files, not the large files.
  24. 3. Federation - Only the pointer files, not the large files, are transfered.
  25. Items 2 & 3 are pending [JGit Git LFS client capabilities](https://bugs.eclipse.org/bugs/show_bug.cgi?id=470333).
  26. ### How does it work?
  27. 1. Files that should be handled by Git LFS are defined in the `.gitattributes` file.
  28. 2. Git LFS installs a pre-commit hook when installed `git lfs install`.
  29. 3. When a commit is made the pre-commit hook replaces the defined Git LFS files with a pointer file containing metadata about the file so that it can be found later.
  30. 4. When a commit is pushed, the changeset is sent to the git repository and the large files are sent to the filestore.
  31. For further details check out the [Git LFS specification](https://github.com/github/git-lfs/blob/master/docs/spec.md).
  32. ### Convert/Migrate existing repository
  33. It is possible to migrate an existing repository containing large files to one that leverages the filestore. However, commit hash history will be altered.
  34. The following command may be run on a local repository:
  35. git filter-branch --prune-empty --tree-filter '
  36. git lfs track "*.docx" "*.pdf" > /dev/null
  37. git add .gitattributes
  38. git ls-files | xargs -d "\n" git check-attr filter | grep "filter: lfs" | sed -r "s/(.*): filter: lfs/\1/" | xargs -d "\n" -r bash -c "git rm -f --cached \"\$@\"; git add \"\$@\"" bash \
  39. ' --tag-name-filter cat -- --all
  40. ### Further Considerations
  41. While [other Git LFS implementations are available](https://github.com/github/git-lfs/wiki/Implementations) as there is no current [JGit LFS client capability](https://bugs.eclipse.org/bugs/show_bug.cgi?id=470333), Gitblit will be unable to access them.