From 697905cbf3b6fc1d8f22322a4f403b4abe2f0c0a Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Mon, 7 Dec 2015 23:09:26 +0000 Subject: fix for #967 filestore menu for all users + Filestore listing filtered by user view permissions + Configuration help for filestore relocated to website files + Added migration example --- src/site/setup_filestore.mkd | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/site/setup_filestore.mkd (limited to 'src/site') diff --git a/src/site/setup_filestore.mkd b/src/site/setup_filestore.mkd new file mode 100644 index 00000000..9ffc9c67 --- /dev/null +++ b/src/site/setup_filestore.mkd @@ -0,0 +1,61 @@ +## Configure Git Large File Storage + +Gitblit provides a filestore that supports the [Git Large File Storage (LFS) API](https://git-lfs.github.com/). + +### Server Configuration + +Gitblit is configured to work straight away. However you may want to update the following in `gitblit.properties`: + + + + + + + + + + + + + + + +
parametervaluedescription
filestore.storageFolder${baseFolder}/lfsThe path on the server where filestore objects are to be saved.
filestore.maxUploadSize-1The 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.
+ + +### Limitations + +Gitblit currently provides a server-only implementation of the opensource Git LFS API. + +1. Files in the filestore are not currently searchable by Lucene. +2. Mirroring a repository that uses Git LFS will only mirror the pointer files, not the large files. +3. Federation - Only the pointer files, not the large files, are transfered. + +Items 2 & 3 are pending [JGit Git LFS client capabilities](https://bugs.eclipse.org/bugs/show_bug.cgi?id=470333). + + +### How does it work? + +1. Files that should be handled by Git LFS are defined in the `.gitattributes` file. +2. Git LFS installs a pre-commit hook when installed `git lfs install`. +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. +4. When a commit is pushed, the changeset is sent to the git repository and the large files are sent to the filestore. + +For further details check out the [Git LFS specification](https://github.com/github/git-lfs/blob/master/docs/spec.md). + +### Convert/Migrate existing repository + +It is possible to migrate an existing repository containing large files to one that leverages the filestore. However, commit hash history will be altered. + +The following command may be run on a local repository: + + git filter-branch --prune-empty --tree-filter ' + git lfs track "*.docx" "*.pdf" > /dev/null + git add .gitattributes + 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 \ + ' --tag-name-filter cat -- --all + + +### Further Considerations + +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. \ No newline at end of file -- cgit v1.2.3