summaryrefslogtreecommitdiff
path: root/README.md
blob: 3429a9f14a4ca90c9ba1e83eabc511c1d686de6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Premises:

* Every project has at least one "canonical" repository. The canonical repo
  tracks the project's official history. New clones are created by cloning
  the canonical repo; the aliases below assume that the `origin` remote
  points to the canonical repo.

* Most development happens on short-lived feature branches, which are merged
  into the canonical repo's `master` branch when accepted. This merge should
  be non-fastforward, but the alias suite doesn't care.

* Developers publish _proposed_ changes to their own repositories, not to
  the canonical repository directly. The aliases below expect the user's
  personal repo to be associated with a remote named with the user's login
  name. (It's fine if this is an alias for `origin`, provided you're
  extremely careful with the `publish` alias.)

* Branches in a developer's personal repository are "unstable" and may be
  rewritten by the author. (It's up to you to communicate with your team;
  if you're working with someone on a shared feature branch, using
  `publish` will lead to obnoxious cleanup work.)

* You have `push.default` set to `simple`. (If your version of `git` doesn't
  support this option, upgrade. The default behaviour of `git push` is
  unsupportably bad.)

* You sometimes want to use normal Git commands, too. (Otherwise, why aren't
  you using `git-flow`, `tig`, or some other workflow frontend?)

# Installation:

    $ git config --global --add include.path '/path/to/aliases.gitconfig'

##  Removal:

    $ git config --global --unset include.aliases \
          '/path/to/aliases.gitconfig'