Git, Github and its use for collaboration
Published: 2022-02-04 21:50:30


**Git** is software for tracking changes in any set of files, usually used for coordinating work among programmers developing source code during software development. Its aims to achieve speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems).
Git was created by Linus Torvalds 17 years ago (2005) for development of the Linux kernel, with other kernel developers contributing to its initial development.  Junio Hamano has been the core maintainer after Git was created. 
Like other distributed version control systems, and unlike most client–server systems, every Git directory on every computer is a full-fledged repository with complete history and full version-tracking abilities, independent of network access or a central server.
Well just so you know a repository contains all  of your project's files and each file's revision history. You can discuss and manage your project's work within the repository and this helps in collaboration when working with group of people. 
Git has two data structures: a mutable index (also called stage or cache) that caches information about the working directory and the next revision to be committed; and an immutable, append-only object database.
 Data structure is a data organization, management, and storage format that enables efficient access and modification

The object database contains five types of objects:

- Blob (binary large object) is the content of a file.
- Tree object is the equivalent of a directory.
- Commit object links tree objects together into history
- Tag object is a container that contains a reference to another 
object and can hold added meta-data related to another object.
- Packfile object is a zlib version compressed of various other objects for compactness and ease of transport over network protocols.

Now we know that Git is a version control system, similar but better than the many alternatives available. So, what makes **GitHub** so special? Git is a command-line tool, but the center around which all things involving Git revolve is the hub—GitHub.com—where developers store their projects and network with likeminded people
Github is **collaborative** tool because user can create a **repository** (usually abbreviated to “repo”) is a location where all the files for a particular project are stored. Each project has its own repo, and you can access it with a unique URL.
If you find a project on GitHub that you’d like to contribute to, you can fork the repo, make the changes you’d like, and release the revised project as a new repo.
**Forking** is when you create a new project based off  of another project that already exists. When you have forked a repository, made a great revision to the project, and want it to be recognized by the original developers—maybe even included in the official project/repository. You can do so by creating a **pull request**.
When multiple people collaborate on a project, it’s hard to keep track revisions—who changed what, when, and where those files are stored. GitHub takes care of this problem by keeping track of all the changes that have been pushed to the repository.
Each user on GitHub has their own profile that acts like a resume of sorts, showing your past work and contributions to other projects via pull requests. Project revisions can be discussed publicly, so a mass of experts can contribute knowledge and **collaborate **to advance a project forward.

#### REFERENCES
(https://docs.github.com/en/repositories/creating-and-managing-repositories/about-repositories)

(https://www.howtogeek.com/180167/htg-explains-what-is-github-and-what-do-geeks-use-it-for/)

(https://en.wikipedia.org/wiki/Git)