]> git.phdru.name Git - git-wiki.git/blobdiff - pep-git.txt
Remove SourceTree: it's free but not opensource
[git-wiki.git] / pep-git.txt
index c07b68f4e3889834cd913fb205f1103db8f56b25..d7bfc7a4835642d7301dd51b15b7abd682f88453 100644 (file)
@@ -75,12 +75,15 @@ Download and installation
 Unix users: download and install using your package manager.
 
 Microsoft Windows: download `git-for-windows
-<https://github.com/git-for-windows/git/releases>`_.
+<https://github.com/git-for-windows/git/releases>`_ or `msysGit
+<https://github.com/msysgit/msysgit/releases>`_.
 
 MacOS X: use git installed with `XCode
-<https://developer.apple.com/xcode/downloads/>`_ or download
+<https://developer.apple.com/xcode/downloads/>`_ 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/>`_.
+<http://sourceforge.net/projects/git-osx-installer/files/>`_ or
+install git with `Homebrew <http://brew.sh/>`_: ``brew install git``.
 
 Initial configuration
 ---------------------
@@ -168,8 +171,9 @@ When you do an initial clone like this::
     $ git clone -b v1 http://git.python.org/python.git
 
 git clones remote repository ``http://git.python.org/python.git`` to
-directory ``python``, creates remote branches and checks out branch
-``v1`` into the working directory.
+directory ``python``, creates remote branches, creates a local branch
+``v1``, configure it to track upstream remotes/origin/v1 branch and
+checks out ``v1`` into the working directory.
 
 Updating local and remote branches
 ----------------------------------
@@ -219,6 +223,20 @@ that non-current branch and then merge::
                                   # rebase instead of merge
     $ git merge v1
 
+If you have not yet pushed commits on ``v1``, though, the scenario has
+to become a bit more complex. Git refuses to update
+non-fast-forwardable branch, and you don't want to do force-pull
+because that would remove your non-pushed commits and you would need
+to recover. So you want to rebase ``v1`` but you cannot rebase
+non-current branch. Hence, checkout ``v1`` and rebase it before
+merging::
+
+    $ git checkout v1
+    $ git pull --rebase origin v1
+    $ git checkout v2
+    $ git pull --rebase origin v2
+    $ git merge v1
+
 It is possible to configure git to make it fetch/pull a few branches
 or all branches at once, so you can simply run
 
@@ -276,6 +294,12 @@ non-bare repository: git refuses to update remote working directory.
 You really should push only to bare repositories. For non-bare
 repositories git prefers pull-based workflow.
 
+When you want to deploy code on a remote host and can only use push
+(because your workstation is behind a firewall and you cannot pull
+from it) you do that in two steps using two repositories: you push
+from the workstation to a bare repo on the remote host, ssh to the
+remote host and pull from the bare repo to a non-bare deployment repo.
+
 Tags
 ''''
 
@@ -284,7 +308,7 @@ during fetch/pull. To fetch all tags (and commits they point to) run
 ``git fetch --tags origin``. To fetch some specific tags fetch them
 explicitly::
 
-    $ git fetch origin tag NAME1 tag NAME2...
+    $ git fetch origin tag TAG1 tag TAG2...
 
 For example::
 
@@ -292,11 +316,13 @@ For example::
 
 Git doesn't automatically pushes tags. That allows you to have private
 tags (lightweight tags are also private for a repo, they cannot be
-pushed). To push tag(s) list them explicitly::
+pushed). To push tags list them explicitly::
 
     $ git push origin tag 1.4.2
     $ git push origin v1 v2 tag 2.1.7
 
+Don't move tags with ``git tag -f`` after they have been published.
+
 
 Commit editing and caveats
 ==========================
@@ -350,20 +376,6 @@ How to undo a merge
 https://kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html
 
 
-Advanced topics
-===============
-
-Staging area
-------------
-
-Staging area aka index is a distinguishing feature of git. See
-`WhatIsTheIndex
-<https://git.wiki.kernel.org/index.php/WhatIsTheIndex>`_ and
-`IndexCommandQuickref
-<https://git.wiki.kernel.org/index.php/IndexCommandQuickref>`_ in Git
-Wiki.
-
-
 Merge or rebase?
 ================
 
@@ -383,6 +395,20 @@ ReReRe
 https://git-scm.com/book/en/Git-Tools-Rerere
 
 
+Advanced topics
+===============
+
+Staging area
+------------
+
+Staging area aka index is a distinguishing feature of git. See
+`WhatIsTheIndex
+<https://git.wiki.kernel.org/index.php/WhatIsTheIndex>`_ and
+`IndexCommandQuickref
+<https://git.wiki.kernel.org/index.php/IndexCommandQuickref>`_ in Git
+Wiki.
+
+
 Advanced configuration
 ======================
 
@@ -403,9 +429,17 @@ TODO: dangling objects, git gc, git repack.
 Tips and tricks
 ===============
 
+TODO: sticky options; example: git grep -O.
+
 TODO: bash/zsh completion, bash/zsh prompt.
 
 
+git on server
+=============
+
+TODO: anonymous access; git over ssh; gitolite; gitweb; cgit; gitlab.
+
+
 From Mercurial to git
 =====================