-
Notifications
You must be signed in to change notification settings - Fork 51
New and Noteworthy 4.3
Implement git attributes support for
- text attributes
- eol attributes
- macros
- binary macro
Git Large File Storage (LFS) is a Git extension for versioning large files
LFS replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote LFS server.
In 4.3 the following features to support LFS in JGit were implemented
- SHA-256 abstraction
- command line command debug-lfs-store to run LFS test server
- LFS server: support LFS protocol and a file system based LFS storage (used in Gerrit lfs-storage-fs plugin)
- LFS server: support Amazon S3 based storage for LFS (used in Gerrit lfs-storage-s3 plugin)
- fix FileLfsRepository to make it thread safe
RefTree enables JGit to version refs (branches, tags and symbolic refs) in a Git tree and enables atomic push which is a precondition to implement Git Ketch.
A group of updates can be applied by updating the tree in one step, writing out a new root tree, and storing its SHA-1. If references are stored in RefTrees, comparing two repositories is a matter of checking if two SHA-1s are identical. Without RefTrees comparing two repositories requires listing all references and comparing the sets.
Track the "refs/" directory as a root tree by storing references that point directly at an object as a GITLINK entry in the tree. For example "refs/heads/master" is written as "heads/master".
Annotated tags also store their peeled value with ^{} suffix, using "tags/v1.0" and "tags/v1.0^{}" GITLINK entries.
Symbolic references are written as SYMLINK entries with the blob of the symlink carrying the name of the symbolic reference target.
- HEAD is outside of "refs/" namespace so it is stored as a special "..HEAD" entry.
- debug-rebuild-ref-tree command line command to migrate refs to RefTreeDatabase
- copy HEAD into RefTree
- RefTreeDatabase: Allow ORIG_HEAD, etc. on non-bare repositories
- RefTreeDatabase: Expose bootstrap refs in getAdditionalRefs
Git Ketch is a multi-master Git repository management system. Writes are successful only if a majority of participant servers agree. Acknowledged writes are durable against server failures as a majority of the participants store all required objects.
Git Ketch is modeled on the Raft Consensus Algorithm. A ketch sailing vessel is faster and more nimble than a raft. It can also carry more source codes. Git Ketch front-loads replication costs, which vaguely resembles a ketch sailing vessel's distinguishing feature of the main mast on the front of the ship.
In 4.3 the following Ketch features were implemented
- basic replication system
- simple map of running leader instances
- intercept push and route it through Ketch
- daemon: Add --ketch=LEADER flag
- add ignoreRemoteFailures option to RepoCommand
- support revision in remote tag
- implement configuration option DIR_NO_GITLINKS
- Enable building JGit and Gerrit in the same Buck build to speed up build for features spanning JGit and Gerrit
3 Bugs and 3 enhancement requests were closed
The following 19 developers worked on this release of JGit :
Chris Gavin, Christian Halstrick, David Ostrovsky, David Pursehouse, Hugo Arès, Ivan Motsch, Jonathan Nieder, Laurent Delaigue, Matthias Sohn, Mike Williams, Philipp Marx, Preben Ingvaldsen, Rüdiger Herrmann, Saša Živkov, Shawn Pearce, Terry Parker, Thomas Wolf, Yuxuan 'fishy' Wang, XinTong Wang