What is Git?
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
What’s New on Git 2.10.2?
Fixes since v2.10.1
- The code that parses the format parameter of for-each-ref command has seen a micro-optimization.
- The “graph” API used in “git log –graph” miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though.
- Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but “git blame” peeked into underlying variable bypassing the macro for no good reason.
- Doc update to clarify what “log -3 –reverse” does.
- An author name, that spelled a backslash-quoted double quote in the human readable part “My \”double quoted\” name”, was not unquoted correctly while applying a patch from a piece of e-mail.
- The original command line syntax for “git merge”, which was “git merge <msg> HEAD <parent>…”, has been deprecated for quite some time, and “git gui” was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation.
- Codepaths that read from an on-disk loose object were too loose in validating what they are reading is a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting.
- “git worktree”, even though it used the default_abbrev setting that ought to be affected by core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this.
- A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn’t and died instead, which has been fixed.
- When “git fetch” tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the “smart-http” transport due to a design bug, which has been fixed.
- When we started cURL to talk to imap server when a new enough version of cURL library is available, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn’t work and the library tried to make HTTP(s) requests instead.
- The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better.
- http.emptyauth configuration is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent “:” (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string.
- “git clone” of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores.
- Documentation for “git commit” was updated to clarify that “commit -p <paths>” adds to the current contents of the index to come up with what to commit.
- A stray symbolic link in $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected.
- The “submodule.<name>.path” stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it and submodule.<name>.url next to each other as if both belong to .git/config. This has been fixed.
- Recent git allows submodule.<name>.branch to use a special token “.” instead of the branch name; the documentation has been updated to describe it.
- In a worktree connected to a repository elsewhere, created via “git worktree”, “git checkout” attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch, which is designated as the primary branch of a bare reopsitory, in a worktree that is connected to the bare repository. The check has been corrected to allow it.
- “git rebase” immediately after “git clone” failed to find the fork point from the upstream.
- When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles when checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully.
- The Travis CI configuration we ship ran the tests with –verbose option but this risks non-TAP output that happens to be “ok” to be misinterpreted as TAP signalling a test that passed. This resulted in unnecessary failure. This has been corrected by introducing a new mode to run our tests in the test harness to send the verbose output separately to the log file.
- Some AsciiDoc formatter mishandles a displayed illustration with tabs in it. Adjust a few of them in merge-base documentation to work around them. Also contains minor documentation updates and code clean-ups.
Branching and Merging
The Git feature that really makes it stand apart from nearly every other SCM out there is its branching model.
Git allows and encourages you to have multiple local branches that can be entirely independent of each other. The creation, merging, and deletion of those lines of development takes seconds.
This means that you can do things like:
- Frictionless Context Switching. Create a branch to try out an idea, commit a few times, switch back to where you branched from, apply a patch, switch back to where you are experimenting, and merge it in.
- Role-Based Codelines. Have a branch that always contains only what goes to production, another that you merge work into for testing, and several smaller ones for day to day work.
- Feature Based Workflow. Create new branches for each new feature you’re working on so you can seamlessly switch back and forth between them, then delete each branch when that feature gets merged into your main line.
- Disposable Experimentation. Create a branch to experiment in, realize it’s not going to work, and just delete it – abandoning the work—with nobody else ever seeing it (even if you’ve pushed other branches in the meantime).
Small and Fast
Git is fast. With Git, nearly all operations are performed locally, giving it a huge speed advantage on centralized systems that constantly have to communicate with a server somewhere.
Git was built to work on the Linux kernel, meaning that it has had to effectively handle large repositories from day one. Git is written in C, reducing the overhead of runtimes associated with higher-level languages. Speed and performance has been a primary design goal of the Git from the start.
Let’s see how common operations stack up against Subversion, a common centralized version control system that is similar to CVS or Perforce. Smaller is faster.
One of the nicest features of any Distributed SCM, Git included, is that it’s distributed. This means that instead of doing a “checkout” of the current tip of the source code, you do a “clone” of the entire repository.
This means that even if you’re using a centralized workflow, every user essentially has a full backup of the main server. Each of these copies could be pushed up to replace the main server in the event of a crash or corruption. In effect, there is no single point of failure with Git unless there is only a single copy of the repository.
Because of Git’s distributed nature and superb branching system, an almost endless number of workflows can be implemented with relative ease.
A centralized workflow is very common, especially from people transitioning from a centralized system. Git will not allow you to push if someone has pushed since the last time you fetched, so a centralized model where all developers push to the same server works just fine.
The data model that Git uses ensures the cryptographic integrity of every bit of your project. Every file and commit is checksummed and retrieved by its checksum when checked back out. It’s impossible to get anything out of Git other than the exact bits you put in.
Unlike the other systems, Git has something called the “staging area” or “index”. This is an intermediate area where commits can be formatted and reviewed before completing the commit.
One thing that sets Git apart from other tools is that it’s possible to quickly stage some of your files and commit them without committing all of the other modified files in your working directory or having to list them on the command line during the commit.
Free and Open Source
Git is released under the GNU General Public License version 2.0, which is an open source license. The Git project chose to use GPLv2 to guarantee your freedom to share and change free software—to make sure the software is free for all its users.
Best Cloud Git 2.10.2 Hosting Recommendation
After reviewed over 30+ Linux hosting companies, we will give you our Git 2.10.2 hosting recommendation. We found ASPHostPortal is the best solution for Git 2.10.2 hosting.
Our review site is designed to be a trusted place for bloggers, individuals and web designers to find best web hosting solutions at an affordable price. We review each web host in our view points independently, and rate them based on their reliability, features, technical support level, prices and reputation in the industry.
Best Cloud Hosting for Git – ASPHostPortal
ASPHostPortal.com was launched in 2008. They are one of the best Linux Hosting in United States is ASPHostPortal.com. All of its Linux hosting services are 100% compatible with Git 2.10.2.
The price of ASPHostPortal.com Git 2.10.2 hosting packages is quite competitive, especially the Linux Intro which we may recommend most here. Going through this promotional link directly and you will get FREE DOMAIN or DOUBLE SQL SPACE, the Linux Intro hosting package is $2.50/mo.
This company offers money back guarantee if any of the clients fail to get the desired results. If the company does not work up to the expectations in a certain month, and the valid refund period is 30 days. In addition, the customer service is based on US and the representatives are working 24/7.