-PEP: 103
-Title: Collecting information about git
-Version: $Revision$
-Last-Modified: $Date$
-Author: Oleg Broytman <phd@phdru.name>
-Status: Draft
-Type: Informational
-Content-Type: text/x-rst
-Created: 01-Jun-2015
-Post-History: 12-Sep-2015
+#format rst
Abstract
========
-This Informational PEP collects information about git. There is, of
+This page (it was PEP 103) collects information about git. There is, of
course, a lot of documentation for git, so the PEP concentrates on
more complex (and more related to Python development) issues,
scenarios and examples.
-The plan is to extend the PEP in the future collecting information
-about equivalence of Mercurial and git scenarios to help migrating
-Python development from Mercurial to git.
-
-The author of the PEP doesn't currently plan to write a Process PEP on
-migration Python development from Mercurial to git.
-
Documentation
=============
<https://git-scm.com/download/linux>`_.
Microsoft Windows: download `git-for-windows
-<https://github.com/git-for-windows/git/releases>`_ or `msysGit
-<https://github.com/msysgit/msysgit/releases>`_.
+<https://github.com/git-for-windows/git/releases>`_.
MacOS X: use git installed with `XCode
-<https://developer.apple.com/xcode/downloads/>`_ or download from
-`MacPorts <https://www.macports.org/ports.php?by=name&substr=git>`_ or
+<https://developer.apple.com/xcode/>`_ or download from `MacPorts
+<https://www.macports.org/ports.php?by=name&substr=git>`_ or
`git-osx-installer
<http://sourceforge.net/projects/git-osx-installer/files/>`_ or
install git with `Homebrew <http://brew.sh/>`_: ``brew install git``.
-`git-cola <https://git-cola.github.io/index.html>`_ is a Git GUI
-written in Python and GPL licensed. Linux, Windows, MacOS X.
+`git-cola <https://git-cola.github.io/index.html>`_ (`repository
+<https://github.com/git-cola/git-cola>`__) is a Git GUI written in
+Python and GPL licensed. Linux, Windows, MacOS X.
`TortoiseGit <https://tortoisegit.org/>`_ is a Windows Shell Interface
to Git based on TortoiseSVN; open source.
<https://git-scm.com/docs/git-rebase#_recovering_from_upstream_rebase>`_.
It is in ``git help rebase``.
-On the other hand don't be too afraid about commit editing. You can
+On the other hand, don't be too afraid about commit editing. You can
safely edit, reorder, remove, combine and split commits that haven't
been pushed yet. You can even push commits to your own (backup) repo,
edit them later and force-push edited commits to replace what have
original commit but preserve two commits created in the current branch
do something like::
- $ git branch save-master # create a new branch saving master
- $ git reflog # find the original place of master
+ $ git branch save-master # create a new branch saving master
+ $ git reflog # find the original place of master
$ git reset $COMMIT_ID
$ git cherry-pick save-master~ save-master
- $ git branch -D save-master # remove temporary branch
+ $ git branch -D save-master # remove temporary branch
git revert: revert a commit
a program; default program for ``-O`` is a pager (usually ``less``),
but you can use your editor::
- $ git grep -Ovim # but not -O vim
+ $ git grep -Ovim # but not -O vim
BTW, if git is instructed to use ``less`` as the pager (i.e., if pager
is not configured in git at all it uses ``less`` by default, or if it
Search the Net for "git prompt" to find other prompt variants.
+SSH connection sharing
+----------------------
+
+SSH connection sharing is a feature of OpenSSH and perhaps derivatives
+like PuTTY. SSH connection sharing is a way to decrease ssh client
+startup time by establishing one connection and reusing it for all
+subsequent clients connecting to the same server. SSH connection
+sharing can be used to speedup a lot of short ssh sessions like scp,
+sftp, rsync and of course git over ssh. If you regularly
+fetch/pull/push from/to remote repositories accessible over ssh then
+using ssh connection sharing is recommended.
+
+To turn on ssh connection sharing add something like this to your
+~/.ssh/config::
+
+ Host *
+ ControlMaster auto
+ ControlPath ~/.ssh/mux-%r@%h:%p
+ ControlPersist 600
+
+See `OpenSSH wikibook
+<https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing>`_ and
+`search <https://www.google.com/search?q=ssh+connection+sharing>`_ for
+more information.
+
+SSH connection sharing can be used at GitHub, GitLab and SourceForge
+repositories, but please be advised that BitBucket doesn't allow it
+and forcibly closes master connection after a short inactivity period
+so you will see errors like this from ssh: "Connection to bitbucket.org
+closed by remote host."
+
+
git on server
=============
<https://kallithea-scm.org/>`_ and `pagure <https://pagure.io/>`_,
both are written in Python; pagure was written by Fedora developers
and is being used to develop some Fedora projects. `GitPrep
-<http://gitprep.yukikimoto.com/>`_ is yet another Github clone,
-written in Perl. `Gogs <https://gogs.io/>`_ is written in Go.
-`GitBucket <https://takezoe.github.io/gitbucket/about/>`_ is written
-in Scala.
-
-And last but not least, `Gitlab <https://about.gitlab.com/>`_. It's
+<http://gitprep.yukikimoto.com/>`_ is yet another GitHub clone,
+written in Perl. `Gogs <https://gogs.io/>`_ is written in Go. `GitBucket
+<https://gitbucket.github.io/gitbucket-news/about/>`_ is written in
+Scala. `RocketGit <https://rocketgit.com/>`_ is AGPL-licensed
+development environment written in PHP (there are plans to rewrite
+critical parts in C).
+
+And last but not least, `GitLab <https://about.gitlab.com/>`_. It's
perhaps the most advanced web-based development environment for git.
Written in Ruby, community edition is free and open source (MIT
license).
To start converting your Mercurial habits to git see the page
`Mercurial for Git users
-<https://mercurial.selenic.com/wiki/GitConcepts>`_ at Mercurial wiki.
+<https://www.mercurial-scm.org/wiki/GitConcepts>`_ at Mercurial wiki.
At the second half of the page there is a table that lists
corresponding Mercurial and git commands. Should work perfectly in
both directions.
documents a few differences between git and hg.
-Copyright
-=========
-
-This document has been placed in the public domain.
-
+Git and GitHub
+==============
-\f
-..
- Local Variables:
- mode: indented-text
- indent-tabs-mode: nil
- sentence-end-double-space: t
- fill-column: 70
- coding: utf-8
- End:
- vim: set fenc=us-ascii tw=70 :
+`gitsome <https://github.com/donnemartin/gitsome>`_ - Git/GitHub
+command line interface (CLI). Written in Python, work on MacOS, Unix,
+Windows. Git/GitHub CLI with autocomplete, includes many GitHub
+integrated commands that work with all shells, builtin xonsh with
+Python REPL to run Python commands alongside shell commands, command
+history, customizable highlighting, thoroughly documented.