Git Terminal Lfs Upload Stays at 0%
| | |
| A command-line session showing repository creation, addition of a file, and remote synchronization | |
| Original author(due south) | Linus Torvalds[1] |
|---|---|
| Developer(s) | Junio Hamano and others[2] |
| Initial release | 7 Apr 2005 (2005-04-07) |
| Stable release | 2.35.ii[three] |
| Repository |
|
| Written in | C, Shell, Perl, Tcl[four] |
| Operating arrangement | POSIX (Linux, macOS, Solaris, AIX), Windows |
| Available in | English language |
| Type | Version command |
| License | GPL-2.0-only[i] [6] |
| Website | git-scm |
Git ()[seven] is software for tracking changes in any set of files, usually used for coordinating work amid programmers collaboratively developing source code during software development. Its goals include speed, information integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on dissimilar systems).[8] [nine] [x]
Git was originally authored by Linus Torvalds in 2005 for development of the Linux kernel, with other kernel developers contributing to its initial development.[11] Since 2005, Junio Hamano has been the core maintainer. As with most other distributed version command systems, and unlike virtually client–server systems, every Git directory on every figurer is a total-fledged repository with consummate history and total version-tracking abilities, independent of network admission or a primal server.[12] Git is complimentary and open-source software distributed under the GPL-2.0-only license.
History [edit]
Git evolution began in April 2005, later on many developers of the Linux kernel gave up access to BitKeeper, a proprietary source-control management (SCM) system that they had been using to maintain the projection since 2002.[13] [14] The copyright holder of BitKeeper, Larry McVoy, had withdrawn free utilise of the product after claiming that Andrew Tridgell had created SourcePuller by contrary engineering the BitKeeper protocols.[15] The same incident also spurred the creation of another version-command system, Mercurial.
Linus Torvalds wanted a distributed system that he could use similar BitKeeper, but none of the available complimentary systems met his needs. Torvalds cited an example of a source-control direction system needing thirty seconds to employ a patch and update all associated metadata, and noted that this would not scale to the needs of Linux kernel evolution, where synchronizing with fellow maintainers could require 250 such actions at once. For his design criterion, he specified that patching should have no more than three seconds, and added three more goals:[eight]
- Take Concurrent Versions System (CVS) as an instance of what not to do; if in incertitude, make the exact reverse decision.[ten]
- Back up a distributed, BitKeeper-similar workflow.[10]
- Include very potent safeguards against corruption, either accidental or malicious.[9]
These criteria eliminated every version-command system in use at the fourth dimension, so immediately after the two.6.12-rc2 Linux kernel evolution release, Torvalds set out to write his own.[x]
The development of Git began on iii Apr 2005.[16] Torvalds appear the projection on 6 April and became self-hosting the side by side mean solar day.[16] [17] The first merge of multiple branches took identify on eighteen April.[18] Torvalds accomplished his performance goals; on 29 April, the nascent Git was benchmarked recording patches to the Linux kernel tree at the charge per unit of 6.7 patches per second.[nineteen] On 16 June, Git managed the kernel 2.6.12 release.[20]
Torvalds turned over maintenance on 26 July 2005 to Junio Hamano, a major contributor to the project.[21] Hamano was responsible for the 1.0 release on 21 December 2005 and remains the project's cadre maintainer.[22]
Naming [edit]
Torvalds sarcastically quipped about the name git (which means "unpleasant person" in British English language slang): "I'one thousand an egotistical bounder, and I name all my projects afterwards myself. First 'Linux', now 'git'."[23] [24] The human being page describes Git as "the stupid content tracker".[25] The read-me file of the source code elaborates farther:[26]
"git" can mean anything, depending on your mood.
- Random three-letter combination that is pronounceable, and not really used by whatever common UNIX command. The fact that information technology is a mispronunciation of "get" may or may not exist relevant.
- Stupid. Contemptible and despicable. Simple. Take your pick from the dictionary of slang.
- "Global data tracker": you lot're in a good mood, and information technology actually works for yous. Angels sing, and a lite suddenly fills the room.
- "Goddamn idiotic truckload of sh*t": when it breaks.
Releases [edit]
List of Git releases:[27]
| Version | Original release date | Latest (patch) version | Release date (of the patch) | Notable changes |
|---|---|---|---|---|
| Old version, no longer maintained: 0.99 | 2005-07-eleven | 0.99.9n | 2005-12-15 | |
| Old version, no longer maintained: i.0 | 2005-12-21 | ane.0.13 | 2006-01-27 | |
| Old version, no longer maintained: 1.1 | 2006-01-08 | one.1.half-dozen | 2006-01-30 | |
| Former version, no longer maintained: 1.two | 2006-02-12 | i.2.six | 2006-04-08 | |
| Old version, no longer maintained: one.3 | 2006-04-eighteen | one.3.3 | 2006-05-xvi | |
| Old version, no longer maintained: 1.4 | 2006-06-10 | 1.4.4.v | 2008-07-sixteen | |
| Old version, no longer maintained: 1.five | 2007-02-14 | i.v.6.half dozen | 2008-12-17 | |
| One-time version, no longer maintained: one.6 | 2008-08-17 | ane.half dozen.6.3 | 2010-12-15 | |
| Old version, no longer maintained: 1.7 | 2010-02-xiii | ane.7.12.4 | 2012-10-17 | |
| Old version, no longer maintained: 1.8 | 2012-10-21 | 1.8.five.6 | 2014-12-17 | |
| Old version, no longer maintained: 1.9 | 2014-02-14 | one.9.v | 2014-12-17 | |
| Onetime version, no longer maintained: 2.0 | 2014-05-28 | ii.0.v | 2014-12-17 | |
| One-time version, no longer maintained: 2.ane | 2014-08-xvi | 2.i.4 | 2014-12-17 | |
| Old version, no longer maintained: ii.2 | 2014-eleven-26 | 2.2.3 | 2015-09-04 | |
| Old version, no longer maintained: 2.3 | 2015-02-05 | 2.3.10 | 2015-09-29 | |
| Erstwhile version, no longer maintained: two.4 | 2015-04-30 | 2.iv.12 | 2017-05-05 | |
| Old version, no longer maintained: two.five | 2015-07-27 | 2.5.vi | 2017-05-05 | |
| Old version, no longer maintained: 2.6 | 2015-09-28 | 2.6.seven | 2017-05-05 | |
| Old version, no longer maintained: 2.7 | 2015-10-04 | 2.7.6 | 2017-07-30 | |
| Old version, no longer maintained: ii.8 | 2016-03-28 | 2.8.half-dozen | 2017-07-30 | |
| Erstwhile version, no longer maintained: 2.9 | 2016-06-13 | ii.9.5 | 2017-07-30 | |
| Old version, no longer maintained: ii.10 | 2016-09-02 | 2.10.5 | 2017-09-22 | |
| Old version, no longer maintained: two.eleven | 2016-eleven-29 | 2.xi.4 | 2017-09-22 | |
| Old version, no longer maintained: 2.12 | 2017-02-24 | 2.12.v | 2017-09-22 | |
| Old version, no longer maintained: 2.xiii | 2017-05-x | two.13.7 | 2018-05-22 | |
| Old version, no longer maintained: ii.14 | 2017-08-04 | two.14.half-dozen | 2019-12-07 | |
| Old version, no longer maintained: 2.15 | 2017-10-30 | two.15.4 | 2019-12-07 | |
| Erstwhile version, no longer maintained: 2.16 | 2018-01-17 | 2.sixteen.6 | 2019-12-07 | |
| Older version, yet still maintained: ii.17 | 2018-04-02 | 2.17.6 | 2021-03-09 | |
| Older version, yet still maintained: 2.18 | 2018-06-21 | two.18.5 | 2021-03-09 | |
| Older version, yet nevertheless maintained: two.19 | 2018-09-10 | 2.19.half dozen | 2021-03-09 | |
| Older version, yet still maintained: 2.twenty | 2018-12-09 | ii.20.v | 2021-03-09 | |
| Older version, yet still maintained: 2.21 | 2019-02-24 | two.21.four | 2021-03-09 | |
| Older version, yet still maintained: 2.22 | 2019-06-07 | 2.22.5 | 2021-03-09 | |
| Older version, yet still maintained: 2.23 | 2019-08-16 | 2.23.4 | 2021-03-09 | |
| Older version, still still maintained: 2.24 | 2019-xi-04 | two.24.4 | 2021-03-09 | |
| Older version, withal still maintained: 2.25 | 2020-01-13 | 2.25.5 | 2021-03-09 | Sparse checkout management fabricated piece of cake[28] |
| Older version, all the same still maintained: 2.26 | 2020-03-22 | 2.26.3 | 2021-03-09 |
[29] |
| Older version, yet still maintained: 2.27 | 2020-06-01 | ii.27.1 | 2021-03-09 | |
| Older version, still still maintained: two.28 | 2020-07-27 | two.28.one | 2021-03-09 |
[30] |
| Older version, still still maintained: 2.29 | 2020-10-19 | ii.29.three | 2021-03-09 |
[31] |
| Older version, yet however maintained: 2.30 | 2020-12-27 | ii.30.three | 2022-04-12 |
[32] |
| Older version, yet all the same maintained: 2.31 | 2021-03-15 | ii.31.2 | 2022-04-12 |
[33] [34] |
| Older version, all the same still maintained: 2.32 | 2021-06-06 | 2.32.1 | 2022-04-12 | |
| Older version, yet nonetheless maintained: 2.33 | 2021-08-xvi | 2.33.ii | 2022-04-12 | |
| Older version, yet notwithstanding maintained: 2.34 | 2021-11-15 | ii.34.ii | 2022-04-12 | |
| Current stable version: ii.35 | 2022-01-25 | 2.35.two | 2022-04-12 | |
| Legend: Quondam version Older version, yet maintained Latest version Latest preview version Future release | ||||
| Sources:[35] [36] | ||||
Design
Git's blueprint was inspired past BitKeeper and Monotone.[37] [38] Git was originally designed equally a low-level version-command system engine, on acme of which others could write front ends, such every bit Cogito or StGIT.[38] The core Git project has since become a complete version-command system that is usable straight.[39] While strongly influenced by BitKeeper, Torvalds deliberately avoided conventional approaches, leading to a unique design.[forty]
Characteristics [edit]
Git's pattern is a synthesis of Torvalds's feel with Linux in maintaining a large distributed development projection, along with his intimate knowledge of file-system performance gained from the same project and the urgent need to produce a working organisation in curt guild. These influences led to the following implementation choices:[41]
- Strong support for non-linear evolution
- Git supports rapid branching and merging, and includes specific tools for visualizing and navigating a non-linear development history. In Git, a cadre assumption is that a change will be merged more than ofttimes than information technology is written, equally it is passed around to various reviewers. In Git, branches are very lightweight: a branch is only a reference to ane commit. With its parental commits, the full co-operative structure can be synthetic.[ improper synthesis? ]
- Distributed development
- Like Darcs, BitKeeper, Mercurial, Boutique, and Monotone, Git gives each programmer a local copy of the full development history, and changes are copied from one such repository to another. These changes are imported equally added development branches and tin be merged in the same way as a locally developed branch.[42]
- Compatibility with real systems and protocols
- Repositories can exist published via Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), or a Git protocol over either a plainly socket or Secure Shell (ssh). Git also has a CVS server emulation, which enables the utilise of existent CVS clients and IDE plugins to access Git repositories. Subversion repositories can exist used straight with git-svn.[43]
- Efficient handling of large projects
- Torvalds has described Git equally being very fast and scalable,[44] and performance tests washed past Mozilla[45] showed that information technology was an society of magnitude faster than some version-control systems; fetching version history from a locally stored repository can be one hundred times faster than fetching it from the remote server.[46]
- Cryptographic authentication of history
- The Git history is stored in such a mode that the ID of a particular version (a commit in Git terms) depends upon the complete evolution history leading upwardly to that commit. One time it is published, it is non possible to modify the sometime versions without information technology beingness noticed. The structure is like to a Merkle tree, but with added information at the nodes and leaves.[47] (Mercurial and Monotone likewise accept this holding.)
- Toolkit-based design
- Git was designed as a set of programs written in C and several shell scripts that provide wrappers around those programs.[48] Although most of those scripts have since been rewritten in C for speed and portability, the design remains, and it is piece of cake to concatenation the components together.[49]
- Pluggable merge strategies
- Equally part of its toolkit pattern, Git has a well-defined model of an incomplete merge, and information technology has multiple algorithms for completing it, culminating in telling the user that it is unable to complete the merge automatically and that manual editing is needed.[fifty]
- Garbage accumulates until collected
- Aborting operations or bankroll out changes will exit useless dangling objects in the database. These are generally a small fraction of the continuously growing history of wanted objects. Git volition automatically perform garbage drove when plenty loose objects have been created in the repository. Garbage collection tin be chosen explicitly using
git gc.[51] - Periodic explicit object packing
- Git stores each newly created object equally a separate file. Although individually compressed, this takes a slap-up deal of space and is inefficient. This is solved past the use of packs that store a large number of objects delta-compressed among themselves in one file (or network byte stream) called a packfile. Packs are compressed using the heuristic that files with the aforementioned name are probably similar, without depending on this for correctness. A corresponding index file is created for each packfile, telling the offset of each object in the packfile. Newly created objects (with newly added history) are still stored as unmarried objects, and periodic repacking is needed to maintain space efficiency. The procedure of packing the repository can be very computationally costly. By allowing objects to exist in the repository in a loose but apace generated format, Git allows the plush pack functioning to be deferred until later, when time matters less, e.one thousand., the end of a workday. Git does periodic repacking automatically, only manual repacking is likewise possible with the
git gccommand. For information integrity, both the packfile and its alphabetize have an SHA-1 checksum inside, and the file proper noun of the packfile likewise contains an SHA-ane checksum. To cheque the integrity of a repository, run thegit fsckcommand.[52]
Some other property of Git is that it snapshots directory copse of files. The earliest systems for tracking versions of source lawmaking, Source Lawmaking Command System (SCCS) and Revision Control System (RCS), worked on private files and emphasized the space savings to be gained from interleaved deltas (SCCS) or delta encoding (RCS) the (mostly similar) versions. Afterward revision-command systems maintained this notion of a file having an identity across multiple revisions of a project. However, Torvalds rejected this concept.[53] Consequently, Git does not explicitly record file revision relationships at any level below the source-lawmaking tree.
These implicit revision relationships have some pregnant consequences:
- It is slightly more costly to examine the change history of one file than the whole project.[54] To obtain a history of changes affecting a given file, Git must walk the global history and and so determine whether each alter modified that file. This method of examining history does, however, permit Git produce with equal efficiency a single history showing the changes to an arbitrary gear up of files. For example, a subdirectory of the source tree plus an associated global header file is a very common case.
- Renames are handled implicitly rather than explicitly. A common complaint with CVS is that it uses the proper noun of a file to place its revision history, so moving or renaming a file is not possible without either interrupting its history or renaming the history and thereby making the history inaccurate. Almost post-CVS revision-command systems solve this past giving a file a unique long-lived proper noun (analogous to an inode number) that survives renaming. Git does not tape such an identifier, and this is claimed as an reward.[55] [56] Source lawmaking files are sometimes split or merged, or merely renamed,[57] and recording this as a simple rename would freeze an inaccurate description of what happened in the (immutable) history. Git addresses the issue past detecting renames while browsing the history of snapshots rather than recording it when making the snapshot.[58] (Briefly, given a file in revision N, a file of the aforementioned name in revision Northward − i is its default ancestor. However, when there is no like-named file in revision N − one, Git searches for a file that existed only in revision N − one and is very like to the new file.) However, it does require more than CPU-intensive piece of work every fourth dimension the history is reviewed, and several options to adapt the heuristics are bachelor. This mechanism does not always work; sometimes a file that is renamed with changes in the same commit is read every bit a deletion of the erstwhile file and the creation of a new file. Developers tin can work effectually this limitation by committing the rename and the changes separately.
Git implements several merging strategies; a not-default strategy can be selected at merge fourth dimension:[59]
- resolve: the traditional three-way merge algorithm.
- recursive: This is the default when pulling or merging ane branch, and is a variant of the 3-manner merge algorithm.
When there are more than one common ancestors that tin exist used for a 3-way merge, it creates a merged tree of the common ancestors and uses that equally the reference tree for the three-way merge. This has been reported to result in fewer merge conflicts without causing mis-merges by tests done on prior merge commits taken from Linux 2.six kernel evolution history. As well, this can detect and handle merges involving renames.
—Linus Torvalds[threescore]
- octopus: This is the default when merging more than two heads.
Data structures [edit]
Git's primitives are non inherently a source-lawmaking direction organization. Torvalds explains:[61]
In many ways you can only see git as a filesystem—it's content-addressable, and information technology has a notion of versioning, but I really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is what I do), and I actually have admittedly cypher interest in creating a traditional SCM system.
From this initial pattern approach, Git has adult the full fix of features expected of a traditional SCM,[39] with features mostly being created equally needed, then refined and extended over time.
Some data flows and storage levels in the Git revision command arrangement
Git has two information structures: a mutable index (besides called stage or cache) that caches information about the working directory and the adjacent revision to exist committed; and an immutable, append-only object database.
The index serves equally a connection point betwixt the object database and the working tree.
The object database contains five types of objects:[62] [52]
- A blob (binary large object) is the content of a file. Blobs have no proper file name, time stamps, or other metadata (A blob's name internally is a hash of its content.[63]). In git each hulk is a version of a file, it holds the file'due south data.
- A tree object is the equivalent of a directory. It contains a list of file names, each with some type bits and a reference to a blob or tree object that is that file, symbolic link, or directory'due south contents. These objects are a snapshot of the source tree. (In whole, this comprises a Merkle tree, significant that only a unmarried hash for the root tree is sufficient and really used in commits to precisely pinpoint to the exact land of whole tree structures of whatever number of sub-directories and files.)
- A commit object links tree objects together into history. It contains the name of a tree object (of the acme-level source directory), a timestamp, a log message, and the names of naught or more parent commit objects.
- A tag object is a container that contains a reference to some other object and can hold added meta-data related to another object. Most normally, it is used to store a digital signature of a commit object corresponding to a particular release of the data being tracked by Git.
- A packfile object is a zlib version compressed of diverse other objects for compactness and ease of send over network protocols.
Each object is identified by a SHA-1 hash of its contents. Git computes the hash and uses this value for the object'southward name. The object is put into a directory matching the first two characters of its hash. The rest of the hash is used equally the file name for that object.
Git stores each revision of a file as a unique hulk. The relationships between the blobs can be found through examining the tree and commit objects. Newly added objects are stored in their entirety using zlib compression. This can consume a large amount of disk space quickly, so objects can exist combined into packs, which utilize delta compression to save space, storing blobs every bit their changes relative to other blobs.
Additionally, git stores labels called refs (short for references) to indicate the locations of various commits. They are stored in the reference database and are respectively:[64]
- Heads (branches): Named references that are advanced automatically to the new commit when a commit is fabricated on top of them.
- Head: A reserved caput that will exist compared confronting the working tree to create a commit.
- Tags: Like branch references but fixed to a particular commit. Used to label of import points in history.
References [edit]
Every object in the Git database that is not referred to may be cleaned up by using a garbage collection command or automatically. An object may be referenced by another object or an explicit reference. Git knows different types of references. The commands to create, move, and delete references vary. "git show-ref" lists all references. Some types are:
- heads: refers to an object locally,
- remotes: refers to an object which exists in a remote repository,
- stash: refers to an object not withal committed,
- meta: e.thousand. a configuration in a bare repository, user rights; the refs/meta/config namespace was introduced retrospectively, gets used by Gerrit,[65]
- tags: see higher up.
Implementations [edit]
gitg is a graphical front-finish using GTK+.
Git (the main implementation in C) is primarily developed on Linux, although information technology also supports most major operating systems, including the BSDs (DragonFly BSD, FreeBSD, NetBSD, and OpenBSD), Solaris, macOS, and Windows.[66] [67]
The first Windows port of Git was primarily a Linux-emulation framework that hosts the Linux version. Installing Git nether Windows creates a similarly named Plan Files directory containing the Mingw-w64 port of the GNU Compiler Collection, Perl v, MSYS2 (itself a fork of Cygwin, a Unix-like emulation surround for Windows) and diverse other Windows ports or emulations of Linux utilities and libraries. Currently, native Windows builds of Git are distributed as 32- and 64-bit installers.[68] The git official website currently maintains a build of Git for Windows, still using the MSYS2 environs.[69]
The JGit implementation of Git is a pure Java software library, designed to be embedded in any Java application. JGit is used in the Gerrit code-review tool, and in EGit, a Git client for the Eclipse IDE.[70]
Go-git is an open-source implementation of Git written in pure Go.[71] Information technology is currently used for backing projects as a SQL interface for Git code repositories[72] and providing encryption for Git.[73]
The Dulwich implementation of Git is a pure Python software component for Python 2.vii, 3.iv and three.5.[74]
The libgit2 implementation of Git is an ANSI C software library with no other dependencies, which can exist congenital on multiple platforms, including Windows, Linux, macOS, and BSD.[75] It has bindings for many programming languages, including Scarlet, Python, and Haskell.[76] [77] [78]
JS-Git is a JavaScript implementation of a subset of Git.[79]
Git GUIs [edit]
Git server [edit]
Screenshot of Gitweb interface showing a commit diff
As Git is a distributed version-command system, information technology could exist used every bit a server out of the box. It'due south shipped with a built-in command git daemon which starts a uncomplicated TCP server running on the GIT protocol.[80] Dedicated Git HTTP servers assistance (amongst other features) by adding access control, displaying the contents of a Git repository via the spider web interfaces, and managing multiple repositories. Already existing Git repositories tin can be cloned and shared to be used by others every bit a centralized repo. Information technology can also be accessed via remote shell just by having the Git software installed and assuasive a user to log in.[81] Git servers typically listen on TCP port 9418.[82]
Open up source [edit]
- Hosting the Git server using the Git Binary.[83]
- Gerrit, a Git server configurable to support code reviews and providing access via ssh, an integrated Apache MINA or OpenSSH, or an integrated Jetty web server. Gerrit provides integration for LDAP, Active Directory, OpenID, OAuth, Kerberos/GSSAPI, X509 https client certificates. With Gerrit iii.0 all configurations will be stored equally Git repositories, no database required to run. Gerrit has a pull-request characteristic implemented in its core but lacks a GUI for it.
- Phabricator, a spin-off from Facebook. As Facebook primarily uses Mercurial, the Git back up is non as prominent.[84]
- RhodeCode Community Edition (CE), supporting Git, Mercurial and Subversion with an AGPLv3 license.
- Kallithea, supporting both Git and Mercurial, developed in Python with GPL license.
- External projects like gitolite,[85] which provide scripts on tiptop of Git software to provide fine-grained access command.
- At that place are several other FLOSS solutions for self-hosting, including Gogs[86] and Gitea, a fork of Gogs, both developed in Go language with MIT license.
Git server as a service [edit]
There are many offerings of Git repositories as a service. The most popular are GitHub, SourceForge, Bitbucket and GitLab.[87] [88] [89] [90] [91]
Adoption [edit]
The Eclipse Foundation reported in its annual community survey that as of May 2014, Git is now the most widely used source-lawmaking management tool, with 42.9% of professional software developers reporting that they utilise Git as their master source-command system[92] compared with 36.3% in 2013, 32% in 2012; or for Git responses excluding use of GitHub: 33.3% in 2014, 30.iii% in 2013, 27.6% in 2012 and 12.eight% in 2011.[93] Open up-source directory Blackness Duck Open Hub reports a similar uptake among open-source projects.[94]
Stack Overflow has included version control in their annual developer survey[95] in 2015 (16,694 responses),[96] 2017 (30,730 responses)[97] and 2018 (74,298 responses).[98] Git was the overwhelming favorite of responding developers in these surveys, reporting equally high as 87.2% in 2018.
Version command systems used by responding developers:
| Proper name | 2015 | 2017 | 2018 |
|---|---|---|---|
| Git | 69.3% | 69.two% | 87.2% |
| Subversion | 36.nine% | ix.one% | 16.1% |
| TFVC | 12.ii% | 7.3% | 10.9% |
| Mercurial | 7.9% | i.9% | 3.6% |
| CVS | 4.2% | [ii] | [ii] |
| Perforce | iii.3% | [ii] | [two] |
| VSS | [ii] | 0.6% | [ii] |
| ClearCase | [ii] | 0.4% | [ii] |
| Zip file backups | [ii] | 2.0% | seven.nine% |
| Raw network sharing | [ii] | one.7% | 7.9% |
| Other | 5.8% | iii.0% | [two] |
| None | 9.3% | 4.8% | iv.viii% |
The Uk IT jobs website itjobswatch.co.united kingdom of great britain and northern ireland reports that equally of late September 2016, 29.27% of UK permanent software evolution task openings have cited Git,[99] alee of 12.17% for Microsoft Team Foundation Server,[100] x.60% for Subversion,[101] ane.30% for Mercurial,[102] and 0.48% for Visual SourceSafe.[103]
Extensions [edit]
There are many Git extensions, like Git LFS, which started as an extension to Git in the GitHub community and is now widely used by other repositories. Extensions are usually independently adult and maintained past different people, only at some point in the time to come a widely used extension can be merged to Git.
Other open-source git extensions include:
- git-annex, a distributed file synchronization system based on Git
- git-flow, a fix of git extensions to provide high-level repository operations for Vincent Driessen's branching model
- git-machete, a repository organizer & tool for automating rebase/merge/pull/button operations
Microsoft developed the Virtual File System for Git (VFS for Git; formerly Git Virtual File System or GVFS) extension to handle the size of the Windows source-lawmaking tree equally office of their 2017 migration from Perforce. VFS for Git allows cloned repositories to employ placeholders whose contents are downloaded but once a file is accessed.[104]
Conventions [edit]
Git does not impose many restrictions on how it should be used, only some conventions are adopted in lodge to organize histories, especially those which require the cooperation of many contributors.
- The master branch is created by default with git init [105] and is oft used every bit the branch that other changes are merged into.[106] Correspondingly, the default proper noun of the upstream remote is origin and so the proper noun of the default remote branch is origin/master. The use of master as the default branch proper name is not universally true. Repositories created in GitHub and GitLab will initialize with a principal branch instead of master. [107] [108]
- Pushed commits should usually not exist overwritten, but should rather exist reverted[109] (a commit is made on elevation which reverses the changes to an earlier commit). This prevents shared new commits based on shared commits from being invalid because the commit on which they are based does not exist in the remote. If the commits contain sensitive information, they should be removed, which involves a more complex process to rewrite history.
- The git-period [110] workflow and naming conventions are ofttimes adopted to distinguish feature specific unstable histories (characteristic/*), unstable shared histories (develop), production fix histories (main), and emergency patches to released products (hotfix).
- Pull requests are not a characteristic of git, but are usually provided by git cloud services. A pull asking is a request by one user to merge a co-operative of their repository fork into some other repository sharing the same history (called the upstream remote).[111] The underlying function of a pull request is no different than that of an administrator of a repository pulling changes from another remote (the repository that is the source of the pull request). Still, the pull request itself is a ticket managed by the hosting server which initiates scripts to perform these actions; it is not a feature of git SCM.
Security [edit]
Git does not provide admission-command mechanisms, just was designed for operation with other tools that specialize in access control.[112]
On 17 Dec 2014, an exploit was found affecting the Windows and macOS versions of the Git client. An attacker could perform capricious code execution on a target computer with Git installed by creating a malicious Git tree (directory) named .git (a directory in Git repositories that stores all the information of the repository) in a different case (such as .GIT or .Git, needed considering Git does not allow the all-lowercase version of .git to be created manually) with malicious files in the .git/hooks subdirectory (a folder with executable files that Git runs) on a repository that the assailant made or on a repository that the aggressor can modify. If a Windows or Mac user pulls (downloads) a version of the repository with the malicious directory, then switches to that directory, the .git directory will be overwritten (due to the example-insensitive trait of the Windows and Mac filesystems) and the malicious executable files in .git/hooks may exist run, which results in the assaulter'southward commands beingness executed. An assaulter could also alter the .git/config configuration file, which allows the attacker to create malicious Git aliases (aliases for Git commands or external commands) or modify extant aliases to execute malicious commands when run. The vulnerability was patched in version 2.2.1 of Git, released on 17 December 2014, and announced the next twenty-four hours.[113] [114]
Git version two.vi.1, released on 29 September 2015, contained a patch for a security vulnerability (CVE-2015-7545)[115] that allowed arbitrary lawmaking execution.[116] The vulnerability was exploitable if an assaulter could convince a victim to clone a specific URL, equally the arbitrary commands were embedded in the URL itself.[117] An assaulter could utilize the exploit via a man-in-the-heart attack if the connection was unencrypted,[117] equally they could redirect the user to a URL of their option. Recursive clones were also vulnerable, since they allowed the controller of a repository to specify arbitrary URLs via the gitmodules file.[117]
Git uses SHA-1 hashes internally. Linus Torvalds has responded that the hash was mostly to guard against accidental abuse, and the security a cryptographically secure hash gives was just an accidental side effect, with the main security being signing elsewhere.[118] [119] Since a demonstration of the SHAttered assail against git in 2017, git was modified to apply a SHA-i variant resistant to this assail. A program for hash role transition is existence written since Feb 2020.[120]
Trademark [edit]
"Git" is a registered word trademark of Software Freedom Salvation under US500000085961336 since 2015-02-03.
Come across besides [edit]
- Comparing of version-command software
- Comparison of source code hosting facilities
- List of version-control software
Notes [edit]
- ^ GPL-2.0-only since 2005-04-11. Some parts nether compatible licenses such as LGPLv2.1.[5]
- ^ a b c d e f 1000 h i j k Not listed as an option in this survey
References [edit]
- ^ "Initial revision of "git", the data manager from hell". GitHub. 8 April 2005. Archived from the original on 16 November 2015. Retrieved xx Dec 2015.
- ^ "Commit Graph". GitHub. eight June 2016. Archived from the original on 20 January 2016. Retrieved 19 December 2015.
- ^ "Git v2.35.ii and below for CVE-2022-24765". 12 April 2022. Retrieved xiii April 2022.
- ^ "Git Source Code Mirror". GitHub. Archived from the original on 8 Feb 2017. Retrieved 1 January 2017.
- ^ "Git's LGPL license at github.com". GitHub. xx May 2011. Archived from the original on xi Apr 2016. Retrieved 12 October 2014.
- ^ "Git'due south GPL license at github.com". GitHub. eighteen Jan 2010. Archived from the original on 11 April 2016. Retrieved 12 October 2014.
- ^ "Tech Talk: Linus Torvalds on git (at 00:01:30)". Archived from the original on 20 December 2015. Retrieved 20 July 2014 – via YouTube.
- ^ a b Torvalds, Linus (7 April 2005). "Re: Kernel SCM saga." linux-kernel (Mailing list). Archived from the original on i July 2019. Retrieved 3 February 2017. "So I'1000 writing some scripts to try to track things a whole lot faster."
- ^ a b Torvalds, Linus (10 June 2007). "Re: fatal: serious inflate inconsistency". git (Mailing list).
- ^ a b c d Linus Torvalds (3 May 2007). Google tech talk: Linus Torvalds on git. Upshot occurs at 02:30. Archived from the original on 28 May 2007. Retrieved 16 May 2007.
- ^ "A Short History of Git". Pro Git (second ed.). Apress. 2014. Archived from the original on 25 December 2015. Retrieved 26 December 2015.
- ^ Chacon, Scott (24 December 2014). Pro Git (2nd ed.). New York, NY: Apress. pp. 29–xxx. ISBN978-1-4842-0077-3. Archived from the original on 25 December 2015.
- ^ Brown, Zack (27 July 2018). "A Git Origin Story". Linux Periodical. Linux Journal. Archived from the original on 13 April 2020. Retrieved 28 May 2020.
- ^ BitKeeper and Linux: The stop of the road? Archived 8 June 2017 at the Wayback Machine
- ^ McAllister, Neil (2 May 2005). "Linus Torvalds' BitKeeper blunder". InfoWorld. Archived from the original on 26 August 2015. Retrieved 8 September 2015.
- ^ a b Torvalds, Linus (27 Feb 2007). "Re: Trivia: When did git self-host?". git (Mailing listing).
- ^ Torvalds, Linus (6 April 2005). "Kernel SCM saga." linux-kernel (Mailing list).
- ^ Torvalds, Linus (17 April 2005). "Commencement always existent kernel git merge!". git (Mailing listing).
- ^ Mackall, Matt (29 April 2005). "Mercurial 0.4b vs git patchbomb benchmark". git (Mailing listing).
- ^ Torvalds, Linus (17 June 2005). "Linux ii.six.12". git-commits-head (Mailing list).
- ^ Torvalds, Linus (27 July 2005). "Meet the new maintainer..." git (Mailing list).
- ^ Hamano, Junio C. (21 December 2005). "Announce: Git ane.0.0". git (Mailing list).
- ^ "GitFaq: Why the 'Git' name?". Git.or.cz. Archived from the original on 23 July 2012. Retrieved 14 July 2012.
- ^ "Afterwards controversy, Torvalds begins piece of work on 'git'". PC World. 14 July 2012. Archived from the original on one February 2011.
Torvalds seemed aware that his conclusion to drib BitKeeper would besides be controversial. When asked why he called the new software, 'git', British slang meaning 'a rotten person', he said. 'I'm an egotistical bastard, so I name all my projects after myself. Kickoff Linux, now git.'
- ^ "git(1) Manual Page". Archived from the original on 21 June 2012. Retrieved 21 July 2012.
- ^ "Initial revision of 'git', the information manager from hell · git/git@e83c516". GitHub. Archived from the original on 8 October 2017. Retrieved 21 Jan 2016.
- ^ "Tags". GitHub. Archived from the original on 29 September 2021. Retrieved 28 Jan 2022.
- ^ "Highlights from Git 2.25". The GitHub Blog. 13 January 2020. Archived from the original on 22 March 2021. Retrieved 27 November 2020.
A thin checkout is nothing more than a listing of file path patterns that Git should attempt to populate in your working copy when checking out the contents of your repository. Effectively, it works similar a .gitignore, except it acts on the contents of your working copy, rather than on your alphabetize.
- ^ "Highlights from Git 2.26". The GitHub Blog. 22 March 2020. Archived from the original on 22 March 2021. Retrieved 25 November 2020.
You may retrieve when Git introduced a new version of its network fetch protocol way dorsum in 2018. That protocol is now used by default in 2.26, then let'southward refresh ourselves on what that means. The biggest problem with the old protocol is that the server would immediately list all of the branches, tags, and other references in the repository earlier the client had a run a risk to send annihilation. For some repositories, this could mean sending megabytes of extra data, when the client really only wanted to know about the chief branch. The new protocol starts with the client request and provides a way for the client to tell the server which references it's interested in. Fetching a single co-operative will simply ask about that co-operative, while most clones will simply ask about branches and tags. This might seem similar everything, merely server repositories may store other references (such as the caput of every pull asking opened in the repository since its creation). Now, fetches from large repositories better in speed, especially when the fetch itself is small, which makes the price of the initial reference advertisement more expensive relatively speaking. And the best part is that y'all won't need to do anything! Due to some clever blueprint, any client that speaks the new protocol can piece of work seamlessly with both old and new servers, falling back to the original protocol if the server doesn't support it. The only reason for the delay between introducing the protocol and making it the default was to permit early adopters discover any bugs.
- ^ "Highlights from Git two.28". The GitHub Blog. 27 July 2020. Archived from the original on 22 March 2021. Retrieved 25 November 2020.
- ^ "Highlights from Git two.29". The GitHub Blog. 19 October 2020. Archived from the original on 22 March 2021. Retrieved 25 November 2020.
- ^ "Git two.30 Release Notes". Git Downloads. 27 December 2020. Archived from the original on 22 March 2021. Retrieved 27 December 2020.
- ^ "Git ii.31 Release Notes". Git Downloads. three April 2021. Retrieved three April 2021.
{{cite web}}: CS1 maint: url-status (link) - ^ "Highlights from Git 2.31". The GitHub Weblog. 15 March 2021. Retrieved 2 July 2021.
- ^ "git/git". GitHub. Archived from the original on 8 Feb 2017. Retrieved 1 December 2011.
- ^ Hamano, Junio (21 November 2007). "How to maintain Git". GitHub. Archived from the original on 22 March 2021. Retrieved 1 August 2020.
- ^ Torvalds, Linus (5 May 2006). "Re: [Denote] Git wiki". linux-kernel (Mailing list). "Some historical groundwork" on Git's predecessors
- ^ a b Torvalds, Linus (8 April 2005). "Re: Kernel SCM saga". linux-kernel (Mailing list). Archived from the original on 22 March 2021. Retrieved 20 February 2008.
- ^ a b Torvalds, Linus (23 March 2006). "Re: Errors GITtifying GCC and Binutils". git (Mailing listing). Archived from the original on 22 March 2021. Retrieved 3 Feb 2017.
- ^ Torvalds, Linus (xx October 2006). "Re: VCS comparison table". git (Mailing listing). Archived from the original on 22 March 2021. Retrieved three Feb 2017. A discussion of Git vs. BitKeeper.
- ^ "Git - A Short History of Git". git-scm.com. Archived from the original on 22 March 2021. Retrieved 15 June 2020.
- ^ "Git - Distributed Workflows". git-scm.com. Archived from the original on 22 Oct 2014. Retrieved fifteen June 2020.
- ^ Gunjal, Siddhesh (19 July 2019). "What is Version Control Tool? Explore Git and GitHub". Medium . Retrieved 25 Oct 2020.
- ^ Torvalds, Linus (19 October 2006). "Re: VCS comparison table". git (Mailing list).
- ^ Jst's Blog on Mozillazine "bzr/hg/git performance". Archived from the original on 29 May 2010. Retrieved 12 February 2015.
- ^ Dreier, Roland (13 Nov 2006). "Oh what a relief it is". Archived from the original on 16 January 2009. , observing that "git log" is 100x faster than "svn log" considering the latter must contact a remote server.
- ^ "Trust". Git Concepts. Git User's Transmission. eighteen Oct 2006. Archived from the original on 22 February 2017.
- ^ Torvalds, Linus. "Re: VCS comparison table". git (Mailing list). Retrieved 10 April 2009. , describing Git'southward script-oriented design
- ^ iabervon (22 Dec 2005). "Git rocks!". Archived from the original on 14 September 2016. , praising Git's scriptability.
- ^ "Git - Git SCM Wiki". git.wiki.kernel.org . Retrieved 25 October 2020.
- ^ "Git User's Manual". 10 March 2020. Archived from the original on 10 May 2020.
- ^ a b "Git - Packfiles". git-scm.com.
- ^ Torvalds, Linus (ten Apr 2005). "Re: more git updates." linux-kernel (Mailing list).
- ^ Haible, Bruno (xi February 2007). "how to speed up 'git log'?". git (Mailing list).
- ^ Torvalds, Linus (1 March 2006). "Re: impure renames / history tracking". git (Mailing list).
- ^ Hamano, Junio C. (24 March 2006). "Re: Errors GITtifying GCC and Binutils". git (Mailing list).
- ^ Hamano, Junio C. (23 March 2006). "Re: Errors GITtifying GCC and Binutils". git (Mailing list).
- ^ Torvalds, Linus (28 November 2006). "Re: git and bzr". git (Mailing list). , on using
git-blameto show code moved between source files. - ^ Torvalds, Linus (18 July 2007). "git-merge(1)". Archived from the original on xvi July 2016.
- ^ Torvalds, Linus (xviii July 2007). "CrissCrossMerge". Archived from the original on xiii January 2006.
- ^ Torvalds, Linus (10 Apr 2005). "Re: more git updates..." linux-kernel (Mailing list).
- ^ "Git - Git Objects". git-scm.com.
- ^ Some of git internals
- ^ "Git - Git References". git-scm.com.
- ^ "Project Configuration File Format". Gerrit Lawmaking Review. Archived from the original on 3 December 2020. Retrieved two Feb 2020.
- ^ "downloads". Archived from the original on 8 May 2012. Retrieved 14 May 2012.
- ^ "git package versions - Repology". Archived from the original on 19 January 2022. Retrieved 30 November 2021.
- ^ "msysGit". GitHub. Archived from the original on 10 Oct 2016. Retrieved 20 September 2016.
- ^ "Git - Downloading Packet". git-scm.com. (source code)
- ^ "JGit". Archived from the original on 31 August 2012. Retrieved 24 August 2012.
- ^ "Git - go-git". git-scm.com . Retrieved 19 April 2019.
- ^ "SQL interface to Git repositories, written in Go.", github.com , retrieved 19 April 2019
- ^ "Keybase launches encrypted git". keybase.io . Retrieved 19 Apr 2019.
- ^ "Dulwich". Archived from the original on 29 May 2012. Retrieved 27 August 2012.
- ^ "libgit2". GitHub. Archived from the original on 11 April 2016. Retrieved 24 August 2012.
- ^ "rugged". GitHub. Archived from the original on 24 July 2013. Retrieved 24 Baronial 2012.
- ^ "pygit2". GitHub. Archived from the original on 5 August 2015. Retrieved 24 August 2012.
- ^ "hlibgit2". Archived from the original on 25 May 2013. Retrieved thirty April 2013.
- ^ "js-git: a JavaScript implementation of Git". GitHub. Archived from the original on 7 August 2013. Retrieved xiii August 2013.
- ^ "Git - Git Daemon". git-scm.com . Retrieved 10 July 2019.
- ^ 4.iv Git on the Server – Setting Upwards the Server Archived 22 October 2014 at the Wayback Machine, Pro Git.
- ^ "1.four Getting Started – Installing Git". git-scm.com. Archived from the original on 2 November 2013. Retrieved 1 November 2013.
- ^ Chacon, Scott; Straub, Ben (2014). "Git on the Server - Setting Up the Server". Pro Git (2nd ed.). Apress. ISBN978-1484200773.
- ^ Diffusion User Guide: Repository Hosting Archived 20 September 2020 at the Wayback Machine.
- ^ "Gitolite: Hosting Git Repositories".
- ^ "Gogs: A painless cocky-hosted Git service".
- ^ Krill, Paul (28 September 2016). "Enterprise repo wars: GitHub vs. GitLab vs. Bitbucket". InfoWorld . Retrieved two February 2020.
- ^ "github.com Competitive Analysis, Marketing Mix and Traffic". Alexa . Retrieved ii February 2020.
- ^ "sourceforge.net Competitive Analysis, Marketing Mix and Traffic". Alexa. Archived from the original on twenty October 2020. Retrieved two February 2020.
- ^ "bitbucket.org Competitive Assay, Marketing Mix and Traffic". Alexa . Retrieved 2 February 2020.
- ^ "gitlab.com Competitive Assay, Marketing Mix and Traffic". Alexa. Archived from the original on xxx Nov 2017. Retrieved 2 February 2020.
- ^ "Eclipse Community Survey 2014 results | Ian Skerrett". Ianskerrett.wordpress.com. 23 June 2014. Archived from the original on 25 June 2014. Retrieved 23 June 2014.
- ^ "Results of Eclipse Customs Survey 2012". eclipse.org. Archived from the original on 11 Apr 2016.
- ^ "Compare Repositories – Open Hub". Archived from the original on 7 September 2014.
- ^ "Stack Overflow Annual Developer Survey". Stack Exchange, Inc. Retrieved 9 January 2020.
Stack Overflow'southward almanac Programmer Survey is the largest and well-nigh comprehensive survey of people who code around the world. Each twelvemonth, we field a survey covering everything from developers' favorite technologies to their job preferences. This year marks the 9th year we've published our annual Developer Survey results, and about 90,000 developers took the xx-infinitesimal survey earlier this year.
- ^ "Stack Overflow Developer Survey 2015". Stack Overflow. Archived from the original on 4 May 2019. Retrieved 29 May 2019.
- ^ "Stack Overflow Developer Survey 2017". Stack Overflow. Archived from the original on 29 May 2019. Retrieved 29 May 2019.
- ^ "Stack Overflow Developer Survey 2018". Stack Overflow. Archived from the original on 30 May 2019. Retrieved 29 May 2019.
- ^ "Git (software) Jobs, Boilerplate Salary for Git Distributed Version Control Organisation Skills". Itjobswatch.co.britain. Archived from the original on 8 October 2016. Retrieved xxx September 2016.
- ^ "Team Foundation Server Jobs, Average Salary for Microsoft Team Foundation Server (TFS) Skills". Itjobswatch.co.uk. Archived from the original on 29 October 2016. Retrieved 30 September 2016.
- ^ "Subversion Jobs, Average Salary for Apache Subversion (SVN) Skills". Itjobswatch.co.u.k.. Archived from the original on 25 October 2016. Retrieved thirty September 2016.
- ^ "Mercurial Jobs, Average Bacon for Mercurial Skills". Itjobswatch.co.great britain. Archived from the original on 23 September 2016. Retrieved 30 September 2016.
- ^ "VSS/SourceSafe Jobs, Boilerplate Salary for Microsoft Visual SourceSafe (VSS) Skills". Itjobswatch.co.uk. Archived from the original on 29 October 2016. Retrieved 30 September 2016.
- ^ "Windows switch to Git most complete: 8,500 commits and i,760 builds each day". Ars Technica. 24 May 2017. Archived from the original on 24 May 2017. Retrieved 24 May 2017.
- ^ "git-init". Git. Archived from the original on 15 March 2022.
- ^ "Git - Branches in a Nutshell". git-scm.com. Archived from the original on twenty Dec 2020. Retrieved 15 June 2020.
The "master" co-operative in Git is not a special branch. Information technology is exactly similar any other co-operative. The only reason nearly every repository has one is that the git init command creates it by default and most people don't carp to modify it.
- ^ github/renaming, GitHub, 4 December 2020, retrieved 4 December 2020
- ^ Default branch name for new repositories now main, GitLab, 22 June 2021, retrieved 22 June 2021
- ^ "Git Revert | Atlassian Git Tutorial". Atlassian.
Reverting has 2 important advantages over resetting. First, it doesn't alter the project history, which makes it a "safe" operation for commits that have already been published to a shared repository.
- ^ "Gitflow Workflow | Atlassian Git Tutorial". Atlassian . Retrieved 15 June 2020.
- ^ "Forking Workflow | Atlassian Git Tutorial". Atlassian . Retrieved fifteen June 2020.
- ^ "Git repository access control". Archived from the original on fourteen September 2016. Retrieved half-dozen September 2016.
- ^ Pettersen, Tim (20 Dec 2014). "Securing your Git server against CVE-2014-9390". Archived from the original on 24 December 2014. Retrieved 22 Dec 2014.
- ^ Hamano, J. C. (18 December 2014). "[Denote] Git v2.2.1 (and updates to older maintenance tracks)". Newsgroup: gmane.linux.kernel. Archived from the original on 19 Dec 2014. Retrieved 22 December 2014.
- ^ "CVE-2015-7545". xv December 2015. Archived from the original on 26 December 2015. Retrieved 26 December 2015.
- ^ "Git 2.6.1". GitHub. 29 September 2015. Archived from the original on 11 Apr 2016. Retrieved 26 December 2015.
- ^ a b c Blake Burkhart; et al. (5 October 2015). "Re: CVE Asking: git". Archived from the original on 27 December 2015. Retrieved 26 Dec 2015.
- ^ "hash - How condom are signed git tags? Only as safe as SHA-1 or somehow safer?". Information Security Stack Exchange. 22 September 2014. Archived from the original on 24 June 2016.
- ^ "Why does Git use a cryptographic hash part?". Stack Overflow. ane March 2015. Archived from the original on 1 July 2016.
- ^ "Git - hash-function-transition Documentation". git-scm.com.
External links [edit]
| | Wikimedia Eatables has media related to Git. |
| | Wikibooks has a book on the topic of: Git |
- Official website
- Git at Open Hub
Source: https://en.wikipedia.org/wiki/Git
Post a Comment for "Git Terminal Lfs Upload Stays at 0%"