KISS = Keep It Simple, Stupid

We've gotten ourselves in a hole where contributors are overwhelmed by the 
complexity of our recommended Git workflows and command lines. We need to dig 
ourselves out, and quickly, before we lose momentum.

I don't think we should move back to Subversion, but I think we accept that 
many people would prefer a radically simpler approach to Git which is more like 
the one we were used to in Subversion.

I think we made a serious mistake by pushing the nvie branching model 
(http://nvie.com/posts/a-successful-git-branching-model/) Just looking at the 
first diagram makes me want to close the page. This is overkill if all you're 
doing is fixing a bug or adding a test or something simple. The only part of 
nvie that should be mandatory is "Don't' do any work on the 'master' branch". 
It should be fine for most contributors to check out the 'develop' branch and 
do all their work there.

Most contributors shouldn't need to worry about using Git's "stage" or "index". 
They can just "commit all". You only need to stage things when you DON'T want 
to commit everything you've done. How often is that?

We SHOULD NOT CARE if there are extra merge commits in the log. That's the way 
Git naturally works. Using obscure and controversial command line options to 
"keep the log clean" is not worth it, especially if it makes it harder for 
people to use visual Git clients. Many people, including me, do not enjoy 
working on the command line (although that's how I'm currently using Git).

With a KISS approach, what most people need to know to use Git each day, after 
they've cloned the repo and checked out the develop branch, can be really 
simple:

1. Edit your files. No Git command required.
2. Merge in other people's work with 'git pull'.
3. If there a merge conflicts, fix them by editing. No Git command required.
4. See what files you've changed or added with 'git status'.
5. See what you've changed in a file with 'git diff <file>'.
6. Commit (to your local repo) what you've done with 'git commit -a'.
7. Share what you've done (in the public repo) with 'git push'.

Note: There are only 7 steps. It's lore in cognitive science that people can 
remember 7 things but not necessarily more.

Note: The only command-line option is -a to commit all your changes. All of 
these commands are probably available through any Git GUI.

If you are working on a significant feature with a group of people over a 
period of time, then learning more about Git so that you can work together on a 
separate branch makes sense.  But many contributors just want to make small 
changes, and the above workflow should suffice.

If this KISS approach resonates, I'd like to have a poll on it.

- Gordon

Reply via email to