awesome-git/README.md

186 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

![Cover image](cover.png)
# Awesome Git
A curated list of amazingly awesome Git tools, resources and shiny things.
## Contributing
Pull requests on interesting tools/projects/resources are welcome.
## Table of Contents
- [Awesome Git](#awesome-git)
- [Tutorial](#tutorial)
- [Style Guide](#style-guide)
- [Client](#client)
- [Repository Hosting](#repository-hosting)
- [Self-Hosted Repository](#self-hosted-repository)
- [Workflow](#workflow)
- [Hook management](#hook-management)
- [Tools](#tools)
- [Extensions](#extensions)
## Tutorial
*There are tons of learning material on the Web*
* [Try Git](https://try.github.io/) - learn Git in 15 minutes with pseudo-terminal interface
* [Atlassian Git Tutorial](https://www.atlassian.com/git/tutorials/) - comprehensive tutorial on Git
* [Learn Version Control with Git](https://www.git-tower.com/learn/) - freemium ebook from fournova Software (makers for Tower), associated with paid video course
* [Pro Git](https://git-scm.com/book/) - free Git book, also available on paper (CC BY-NC-SA 3.0)
* [Learn how to use Git](https://www.deployhq.com/git) - free tutorials and resources to help you learn the basics of Git
* [The Git Community Book](https://schacon.github.io/gitbook/) - book built by dozens of people in the Git community
* [Git Pocket Guide](https://shop.oreilly.com/product/0636920024972) - a short O'Reilly book on Git
* [Git Real: Code School](https://www.codeschool.com/courses/git-real/) - paid training course from Code School
* [Git Branching](https://pcottle.github.io/learnGitBranching/) - visual way to learn git branching
* [Learn Git in a Month of Lunches](https://www.manning.com/books/learn-git-in-a-month-of-lunches) - tutorial-based book by Manning Publications
* [Git Magic](http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html) - short book about Git
* [Git from the bottom up](https://jwiegley.github.io/git-from-the-bottom-up/) - great series of articles about Git
* [Git-It](https://github.com/jlord/git-it-electron) - Interactive Tutorial App that runs on your Desktop!
* [Git How To](https://githowto.com) - step by step intro
* [Migrating to Git LFS](https://vooban.com/en/tips-articles-geek-stuff/migrating-to-git-lfs-for-developing-deep-learning-applications-with-large-files/) - Use Git LFS on an existing repository to manage large files in a better way
* [Explain Git with D3](https://onlywei.github.io/explain-git-with-d3/) - Visualized few basic Git concepts using D3.js: commit, branch, checkout, reset, revert, merge, rebase, fetch, pull, push, tag
* [Making Sense of Git A Visual Perspective](https://appendto.com/2015/06/making-sense-of-git-a-visual-perspective/) - Git from a timeline and level perspective and git commands cheatsheet grouped by functionality
* [Git & Git-Flow Cheat Sheet](https://github.com/arslanbilal/git-cheat-sheet)
* [Git Tips](https://github.com/git-tips/tips)
* [Interactive/Contextual/Visual Cheat Sheet](https://ndpsoftware.com/git-cheatsheet.html)
* [The 'Git Pretty' Flow-Chart](http://justinhileman.info/article/git-pretty/git-pretty.png) - How to Recover from a Mess
* [Software Carpentry: Git Lessons](https://software-carpentry.org/lessons/)
* [The Git Parable](http://tom.preston-werner.com/2009/05/19/the-git-parable.html) - GitHub Cofounder's Narrative-style Intro to Git Concepts
* [CodeBasicsHub: Git Video Tutorials](https://codebasicshub.com/tutorial/git-github/what-is-git)
* [Intermediate Git](http://www.columbia.edu/~zjn2101/intermediate-git/#1) - lower-level, more structural explanation of git concepts
* [Fork and Pull Request Workflow](https://github.com/susam/gitpr) - Very nicely explained, simple and crisp way of understanding git fork and pull request workflow.
* [Git School Dude](https://www.youtube.com/c/DanGitschoolDude) - It's a YouTube channel with a lot of great git videos. It covers everything from the basics to advanced Git topics.
* [A Git Choose Your Own Adventure](https://sethrobertson.github.io/GitFixUm/fixup.html) - I never found a git tutorial I didn't understand while doing it. Just sometimes those tutorials didn't line up very well with my actual work. This git help in the form of a choose your own adventure was a life saver when I was first starting out.
* [On undoing, fixing, or removing commits in git](https://sethrobertson.github.io/GitFixUm/fixup.html) - fairly comprehensive guide to recovering from what you did not mean to do when using git
* [Deconstructing a git commit](https://krishnabiradar.com/blogs/deconstructing-a-git-commit/) - A blog explaining how git creates and stores commit histories.
* [Flight rules for Git](https://github.com/k88hudson/git-flight-rules) - guide about what to do when things go wrong
* [Use gitk to understand git](https://lostechies.com/joshuaflanagan/2010/09/03/use-gitk-to-understand-git/) - all important Git terms (commit, commit SHA, branch, merge, rebase) explained using gitk
* [Git Cherry-pick and its usages](https://www.loginradius.com/blog/async/git-cherry-pick/) - A blog explaining how command git cherry-pick works.
* [The ultimate guide to <code>.gitignore</code>](https://github.com/groda/the_ultimate_gitignore_guide) All about `.gitignore`.
## Style Guide
*Style guide when you work with git*
* [Udacity Nanodegree Style Guide](https://udacity.github.io/git-styleguide/index.html)
## Client
*Git clients are available on every platform, from mainframe to your mobile device*
* [GitHub Desktop](https://desktop.github.com/) - Git Client by GitHub. works with GitHub and GitHub Enterprise seamlessly
* [SourceTree](https://www.sourcetreeapp.com/) - free (in-beer) GUI client. Windows and Mac only
* [Tower](https://www.git-tower.com/) - a popular non-free Git GUI client. Mac and Windows
* [GitKraken](https://www.gitkraken.com/) - a cross Git client for Windows, Mac & Linux. Electron based. Free for non-commercial use and paid Pro version is available.
* [Fork](https://git-fork.com) - An awesome and free git client for macOS and Windows
* [TortoiseGit](https://tortoisegit.org/) - an easy-to-use Git client on Windows. well-integrated with Windows Explorer.
* [SmartGit](https://www.syntevo.com/smartgit/) - a commercial comprehensive SCM client with Git, SVN, Mercurial. cross-platform (works on Windows, Mac and Linux)
* [RabbitVCS](http://rabbitvcs.org/) - TortoiseSVN inspired graphic tool for version control systems, with Nautilus and Thunar integration
* [gitg](https://wiki.gnome.org/Apps/Gitg/) - a open-source GTK+ GUI client
* [git-cola](https://git-cola.github.io/) - a cross-platform Git GUI client
* [SGit](https://github.com/sheimi/SGit) - Git client for Android 4.x
* [Ungit](https://github.com/FredrikNoren/ungit) - The easiest way to use git. On any platform. Anywhere.
* [GitUp](http://gitup.co) - a clean, minimal Git client. Mac only.
* [GitExtensions](https://gitextensions.github.io/) - a shell extension, a Visual Studio 2010-2015 plugin and a standalone Git repository tool.
* [WorkingCopy](https://workingcopyapp.com) - a powerful Git client for iOS. Free with in-app purchase to unlock the ability to push commits.
* [Git Add-ons](https://github.com/stevemao/awesome-git-addons) - Enhance the basic `git` CLI
* [Magit](https://magit.vc) - A Git porcelain inside Emacs
* [Vershd](https://vershd.io/) - a free for personal use effortless Git GUI for Windows, Mac, & Linux.
* [lazygit](https://github.com/jesseduffield/lazygit) - A simple terminal UI for git commands, written in Go
## Repository Hosting
*People have plenty of options to host their source code*
* [GitHub](https://github.com/) - the de-facto git hosting service. Perfect integration with most external services.
* [Awesome GitHub](https://github.com/phillipadsmith/awesome-github) - Resources & Learning for GitHub
* [GitHub Cheat Sheet](https://github.com/tiimgreen/github-cheat-sheet)
* [GitHub Browser Extensions](https://github.com/stefanbuck/awesome-browser-extensions-for-github)
* [BitBucket](https://bitbucket.org/) - well-known for its free private repository (5 user max).
* [Jetbrains Space](https://www.jetbrains.com/space/) - Jetbrains all-in-one solution for software teams, with IM, ticket tracking, source control.
* [GitLab.com](https://about.gitlab.com/gitlab-com/) - a free Git repository hosting service served by GitLab EE. Unlimited repositories and private collaborators
* [Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) - cloud service for software development formerly known as Visual Studio Team Services, Visual Studio Online and Team Foundation Service Preview
* [AWS CodeCommit](https://aws.amazon.com/codecommit/) - a SaaS service provided by Amazon Web Service on high availability infrastructure
* [Kiln](https://www.fogcreek.com/kiln/) - paid Git repository hosting service
* [Deveo](https://deveo.com/) - a paid repository hosting service with support for Git, Subversion, Mercurial, WebDAV
## Self-Hosted Repository
*Or you can host the code yourselves*
* [Gitolite](https://gitolite.com/gitolite/) - a simple with fine-grained access control
* [GitHub Enterprise](https://enterprise.github.com/) - self-hosted solution provided from GitHub
* [Bitbucket Server](https://www.atlassian.com/software/bitbucket/server) - self-hosted refrom Atlassian. Good integration with JIRA and other Atlassian products
* [GitLab CE/EE](https://gitlab.com/) - a popular open-source Git (CE) with paid support option (EE).
* ~~[Upsource](https://www.jetbrains.com/upsource) - recent offer from Jetbrains, a famous developer-oriented software company. Code repository hosting feature pending. Free for 10 users. Good integration with YouTrack and TeamCity~~
* Upsource is no longer available as a commercial product as of February 1, 2022.[*](https://www.jetbrains.com/upsource/)
* [Gogs](https://gogs.io/) - a self-hosted Git Service written in Go.
* [Gitea](https://gitea.io/) - a community managed fork of Gogs, lightweight code hosting solution written in Go.
* [onedev](https://github.com/theonedev/onedev) - Self-hosted Git Server with Kanban and CI/CD
* [GitBucket](https://github.com/takezoe/gitbucket/) - a GitHub clone powered by Scala.
* [GitBlit](http://gitblit.com/) - Pure Java Stack for managing, view, and serving Git repositories.
* [Apache Allura](https://allura.apache.org/) - an open source implementation of project hosting platform
* [Phabricator](https://www.phacility.com/) - an integrated set of powerful tools to help companies build higher quality software
* Effective June 1, 2021: Phabricator is no longer actively maintained.[*](https://admin.phacility.com/phame/post/view/11/phacility_is_winding_down_operations/)
* [RhodeCode CE/EE](https://rhodecode.com/) - a platform delivering enterprise source code management
* [Soft Serve](https://github.com/charmbracelet/soft-serve) - a tasty, self-hostable Git server for the command line
## Workflow
*Inexpensive branching allows people adopt workflows other than the classic centralized workflow*
* [Pro Git - Distributed Workflows](https://git-scm.com/book/it/v2/Distributed-Git-Distributed-Workflows)
* [Atlassian Git Tutorial - Comparing Workflows](https://www.atlassian.com/git/tutorials/comparing-workflows)
* [Patterns for Managing Source Code Branches](https://martinfowler.com/articles/branching-patterns.html)
* [Branching Models article from Nyx](https://mooltiverse.github.io/nyx/guide/user/best-practice/branching-models/)
### Comparing workflows
*No single workflow fits everyone's need*
* [Gitflow](https://nvie.com/posts/a-successful-git-branching-model/) - the most well-known Git workflow model
* [GitHub flow](http://scottchacon.com/2011/08/31/github-flow.html) - a simple branching model with a single master
* [GitLab flow](https://about.gitlab.com/2014/09/29/gitlab-flow/)
* [Git DMZ Flow](https://gist.github.com/djspiewak/9f2f91085607a4859a66)
* [Aoneflow](https://www.alibabacloud.com/blog/how-do-we-manage-code-branches-at-alibaba_593834) - an interesting branch model which delays the final merge to production branch, adopted by Alibaba. more article (in Chinese text) at [1](https://segmentfault.com/a/1190000016373314), [2](https://yq.aliyun.com/articles/573549)
* [Agit-flow](https://git-repo.info/en/2020/03/agit-flow-and-git-repo/) - Inspired by Gerrit workflow, Agit-flow is a centralized git workflow and used in Alibabas internal source code platform
## Hook management
*Git provide hooks at commit/push phrase, allowing integration with and code quality checking tool and Continuous Integration (CI)*
* [pre-commit](https://pre-commit.com/) - a framework for managing and maintaining multi-language pre-commit hooks from Yelp. Extensive support for multiple programming language.
* [Overcommit](https://github.com/brigade/overcommit/) - a extendable Git hook manager written with Ruby.
* [quickhook](https://github.com/dirk/quickhook/) - a fast, Unix'y, opinionated Git hook runner
* [husky](https://github.com/typicode/husky) - Git hooks for Node.js, manage your hooks from your package.json
* [Mookme](https://github.com/Escape-Technologies/mookme) - A simple and easy-to-use, yet powerful and language agnostic git hook for monorepos
* more on https://githooks.com/
## Tools
*Various tools for daily operations*
* [awesome-git-addons](https://github.com/stevemao/awesome-git-addons) - lists more than 20 git addons including all available commands
* [myrepos](https://myrepos.branchable.com/) - a tool to manage multiple version control repositories
* [mu-repo](https://fabioz.github.io/mu-repo/) - a tool to help in dealing with multiple git repositories
* [multi-gitter](https://github.com/lindell/multi-gitter) - a tool to make changes in multiple repositories simultaneously
* [gitwalk](https://github.com/pazdera/gitwalk) - Bulk processing of git repos
* [gr](http://mixu.net/gr/) - a tool for managing multiple git repositories
* [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/) - a simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history
* [GitIgnore Collection](https://github.com/github/gitignore) - collection of gitignore files for various programming language
* [etckeeper](https://etckeeper.branchable.com/) - a collection of tools to let /etc be stored in a git repository
* [git-extras](https://github.com/tj/git-extras) git utilities adding useful git commands.
* [git-extra-commands](https://github.com/unixorn/git-extra-commands) - Another collection of useful git commands.
* [git-follow](https://github.com/nickolasburr/git-follow) - a tool for following lifetime changes of a file throughout the history of a Git repository.
* [Gitrob](https://github.com/michenriksen/gitrob) - a command line tool to find sensitive information lingering in publicly available files on GitHub
* [gitFS](https://www.presslabs.com/gitfs/) - a FUSE file system that fully integrates with git
* [Gitless](https://gitless.com/) - an experimental version of Git that changes some of Git's underlying concepts
* [ghq](https://github.com/motemen/ghq) — Organization for remote repositories
* [bash-git-prompt](https://github.com/magicmonty/bash-git-prompt) - An informative and fancy bash prompt for Git users
* [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog) - a set of tools for parsing [conventional commit](https://conventionalcommits.org/) messages from git histories
* [release-it](https://github.com/webpro/release-it) - Automate releases for Git repositories and/or npm packages. Changelog generation, GitHub/GitLab releases, etc.
* [gickup](https://github.com/cooperspencer/gickup) - Backup repos from various hosters to local or other hosters.
* [git-absorb](https://github.com/tummychow/git-absorb) - `git commit --fixup`, but automatic
* [jc --git-log](https://kellyjonbrazil.github.io/jc/docs/parsers/git_log) - Convert your git log to JSON.
* [gitbackup](https://github.com/amitsaha/gitbackup) - a tool to backup your Bitbucket, GitHub and GitLab repositories.
* [soba](https://github.com/jonhadfield/soba) - scheduled backups of repositories from popular providers with change detection.
## Extensions
*Git is designed for source control management. but people extend the idea and push version control to everywhere*
* [Git Large File Storage](https://git-lfs.github.com/) - practical solution for versioning large files. supported by GitHub
* [Git Virtual File System or GVFS](https://github.com/Microsoft/GVFS) - solution for managing very large Git repository while maintaining speed and efficiency of most operations. in developement by Microsoft.
* [git-annex](https://git-annex.branchable.com/) - allow managing large binaries among machines, as if operation a normal git repository. possible to creates a synchronised folder with [git-annex assistant](https://git-annex.branchable.com/assistant/).