Available a distributed source code release Git 2.31 . Git is one of the most popular, reliable and high-performance version control systems, providing flexible non-linear development tools based on branching and merging. To ensure the integrity of history and resilience to changes “retroactively”, implicit hashing of the entire previous history in each commit is used, it is also possible to certify individual tags and commits with digital signatures of the developers.
Compared to the previous release, 679 changes were adopted in the new version, prepared during participation of 85 developers, of which 23 took part in development for the first time. Highlights innovations :
- Added the command “ git maintenance “, allowing you to perform periodic work on systems not supporting cron. For example, using the new command, you can organize the periodic launch of the repository packaging process so that you do not wait for the repository lock to complete when the packaging is automatically performed during the launch of various commands. The “git maintenance” command allows you to perform optimizations and operations for maintaining the optimal structure of the repository in the background without blocking the interactive session – once an hour, work is performed to proactively load fresh objects from the remote repository and update the file with the commit graph, and every night the repository packaging process is started .
- Added support for maintaining a reverse index on disk (revindex) for pack files. Recall that Git stores all data in the form of objects, which are stored in separate files. To improve the efficiency of working with the repository, objects are additionally placed in pack files, in which information is presented in the form of a stream of objects following one after another (the same format is used when transferring objects with the git fetch and git push commands). For each pack-file, an index file (.idx) is created, which allows using the object identifier to very quickly determine the offset in the pack-file at which this object is stored. The reverse index (.rev) proposed in Git 2.31 is aimed at optimizing the process of determining an object identifier from information about the location of an object in a pack file.
Previously, such a conversion was performed on the fly during parsing of a pack file and was stored only in memory, which is not allowed reuse of such indexes and forced the index to be generated every time. The operation of building the index is reduced