47 comments

[ 4.3 ms ] story [ 107 ms ] thread
Who uses this? Is it an effective part of your daily workflow?
Since it was just released, I doubt many outside of github have an established workflow with this.

Maybe someone with the Windows client can provide more insight, given the similarities.

The Mac client has been around since 2011 ...
I don't, but I do know that at my last job the documentation team started using it to bring writers into version control. It allowed a lot of them to grok what was happening without being scared of the command line.
Similar reason on my team: team members with zero source control experience use it as a way to very simply sync changes on their local drive to a branch (typically one we rarely if ever change) with files that they will probably only ever change. So the chance I merge conflicts are low, and they are in and using it very quickly. It works well for simple, beginner users!
I use it. My work git repo isn't github, so switching between this tool for github and cmd line for work has become part of my habit field. I still go back to cmd line for more complex stuff though.
You can use this tool for any repo, not just GitHub repos. We have a mixture of non-GitHub and GitHub hosted repos that I manage all within GitHub for Mac. When they first released this I was actually using Beanstalk, but still used the GitHub for Mac application to manage those repos as well.
Does it work with svn repos? i.e., if I've git svn cloned a repo on my machine. Can I interact with it with GhfM? Will sync do 'git svn dcommit'?
(Biased, I work at GitHub and helped design the original GHfM)

I use it every day, almost all of the time. I don't use a lot of it, but what I do use is tremendously useful. My workflow is usually:

1. Navigate to the folder in terminal (old habit, or starting servers) and type in `github .` which launches the client for this repo.

2. Sync to pull in new changes (cmd + s)

3. Create a new branch (cmd + b)

4. Commit as I code (visual diff helps me do light code review on the spot). This is definitely the core usage for me — seeing what uncommitted changes I have, selecting out partial commits, drafting up good commit messages, amending bad commits, etc.

5. When I'm ready to publish my branch, sync again (cmd + s)

The key for me really comes down to some really simple stuff: a visual editor for creating commits, and quick keyboard commands to common actions (branching, switching branches, push/pull). It's possible to do fast in terminal, but muscle memory serves me personally much better with real keyboard commands.

I don't get it. How in the world is that any easier than:

  cd /your/src/dir
  git pull

  <edit stuff>

  git diff

  <look at stuff; possibly edit more stuff>

  git commit -m "edited stuff"
 
  <oops...forgot something; edit another file>

  git commit -a --amend
  git push origin
  
Which, of course, has the added advantage that you're using git, instead of using a GUI obfuscation layer on top of git, and therefore learning your tools.

I mean...I sort of get why people do git integration in editors (even thought it tends to lead to ignorance of git), but opening up another, non-console, non-editing app, just for git?

Everyone uses software differently; brains work different. I've used Git on the command line for almost a decade now, and I find my current workflow much nicer.

You also left out a lot of the (again simple) commands I've included — switching branches and partial commits, where things like fuzzy autocomplete are very nice if your shell does not hook into Git and support fuzziness.

Good point. I left them out because there's more than one way to do it, and if you let a GUI tool do it for you, you become ignorant of those issues:

  git checkout -b new_branch
  <edit edit edit>
  git commit -a -m "i'll merge this branch"
  git checkout master
  git merge new_branch
vs:

  git checkout -b new_branch
  <edit edit edit>
  git commit -a -m "did stuff that i'll rebase this time"
  git fetch
  git rebase origin/master
  git checkout master
  git merge new_branch
vs:

  git checkout -b new_branch
  <edit foo.txt and bar.txt>
  git add foo.txt
  git commit -m "edited foo"
  git stash
  ...
  
People think differently, but nothing you've described is conceptually different than using the CLI. It's just a GUI, doing/obscuring the same stuff -- stuff that you need to understand to use git.
We have barely technical people on the team who use GitHub for Mac because they aren't comfortable in a CLI, but they are very comfortable using a regular application they can launch from their doc. That way GitHub gets to design around Git edge cases, and they don't have to get screwed when weird things happen in the CLI.
Yeah, that's the classic argument for wrapping a CLI with a GUI. The only problem is that with git, you can't design around the "weird things"...if the user is in a weird state in version control, they need to know about it.

In other words, it's the leaky abstraction problem. You can pretty up the UI, but ultimately, you have to communicate the concept to the user. It's how we got those "Can I copy The Internet?" questions in Windows 95....

I've found myself using a combination of both GitHub app, and CLI. Usually I'll checkout repos, make commits and push/pull using the GitHub app.

Then I'll switch over to the CLI for branching, merging, resetting and bitsecting (the latter two arent possible in the GitHub app)

for one thing, you are forgetting that people are human. this is what that workflow would more realisticly look like:

    cd /yor/src/dir
    bash: cd: /yor/src/dir: No such file or directory
examines closely to look for typo cd /your/src/dir

    <edit stuff>

    git diff

    git comit -m "edited stuff"
    Did you mean this? git: 'comit' is not a git command. See 'git --help'.
Did you mean this? commit git commit -m "edited stuff"

I think this is enough to get the picture.

(comment deleted)
> cd /yor/src/dir > bash: cd: /yor/src/dir: No such file or directory <tab> ?

And on anecdotal evidence, I've observed that people who use git intensively everyday often have aliases to these commands that have a low probability of typos.

eg gcom => git commit

Is there any way to revert a single hunk interactively in the client (like git checkout -p)?

I too use it for light code review, but often find spurious whitespace/brace placement changes that I want to revert to make my eventual PR a bit less noisy..

I believe you can select the lines/hunk you want to revert, then right click the filename (on the left) and click "Discard Changes" — but I would definitely ensure that's the case on some throwaway diff before believing me! Discard changes is no joke. I usually commit everything I want, then discard changes when all I'm left with is the bad whitespace/files.
(shameless plug) git-cola can do that, and it's open source.
I use this but I use it primarily as a diff'ing tool. It's very convenient for that and is also handy on the occasions I'm working on something and then look and realize I have several commits worth of uncommitted changes. Where the UI excels for this is easily just unchecking a couple files or highlighting a few lines from one file to commit only exactly what I want to and then quickly re-checking and committing the rest. This doesn't happen all that much but when it does it's great having a tool that makes it easy to deal with.

Other then that I just find the command line to be quicker for most things.

I've used the Windows version... When it isn't crashing it's extremely laggy.

Mind you I am working on repos in the several hundred mb size or at least double digit mb.

The mac version seems to be similar issues, for example if I look at a commit with more like then 150 file changes it pretty much either lags to the point where I force quit or crashes.

Maybe it's just me, but the command line still works better for me.

This is one of around 4 or 5 applications that I have open 100% of the time on my Mac. I still use the command line for some things, but for the most part I've saved massive amounts of time (and prevented a lot of bugs thanks to the visual code diff view) thanks to GitHub for Mac.
The GUI has dramatically increased the rate of contributions for web, content, and design work from our non-hardcore devs. I also use it when I want something really low friction.
I used to use it just for the ability to individually stage chunks/lines, because I find "git add -p" incredibly hard to use. Now I tend to use GitX-dev for OSX [1] to do that instead, because I find it more powerful than Github for Mac. There's also a ncurses-based interface for git called tig [2] which can also do the chunk staging, but I only use it when I don't have a GUI.

[1] http://rowanj.github.io/gitx/ [2] http://jonas.nitro.dk/tig/

I use this. It's actually a nice client even for non-github repos.
I use it occasionally, even though magit has largely taken its place. In part, I like the way it ships the command-line git program: inside its .app bundle. Very clean and convenient if you don't fell like pulling in Homebrew or polluting /usr/local. Many other graphical Git clients are not hygienic in this way (i.e., they pollute areas of the filesystem outside their .app bundles).
I've seen designers on a team use it.
I don't use this, but have used GitHub for Windows. I can see it being useful for those less technically inclined, or 'afraid' of the command line.

Personally, I don't have an issue with using the command line for Git, but I get by just fine with SourceTree.

It's helpful in visualising Git concepts with its tree graph, and I don't have to remember commands. I also realise this goes counter to the command-line culture of HN :)

I use this every day basically for pushing and pulling to and from Github. For pretty much every other git function I use SourceTree.

I find the Github app too limiting for most git functions other than pushing and pulling (and the resulting rebase or merge) to the remote repositories, but the interface is much much better – simpler, quicker and easier – for those specific tasks than SourceTree.

Does someone involved in the project know what is the status of desktop notifications? Last time I checked, it had been removed from the app, which was a deal breaker for me.
This is the only reason I have installed the app. Patiently waiting for a good desktop notifications system. I'm on far too many projects at any time, some high volume open source, and I really would like notifications built in. Currently giving The Hub App a spin.

http://thehubapp.com

I was using it only to see a nice diff with colours instantly. It bit me once, though. I couldn't figure out why my new folder 'icon' was being ignored. I checked the gitignore, update etc. The problem was the app added global gitignore config for mac icons.
While this looks like an improvement, it doesn't look nearly as good as Sourcetree. I am not a fan of this ultra minimalist design that makes everything outside of a strict workflow hard to find.
Probably a dumb question but can I use this for repositories hosted anywhere or does this only work with Github repositories?

I currently use SourceTree but only for solving conflicts and manually adding things to staging in increments. I would like to give this software a try.

I just tried it out and found that it can work with repositories that are hosted elsewhere, but I haven't yet found a way to clone a new local repo from a non-github remote repo.
Yeah that's more than good enough. I only clone in terminal anyways. I'll give this a shot for a couple of days. Thank you!
If it's anything like Github for Windows, then yes, you can, but it's not exactly intuitive. Here's a stackoverflow post which should cover all the basics, and a bit more.

[0] http://stackoverflow.com/questions/13664949/use-github-for-w...

However, overall, the application is pretty basic (assuming it's just like the Github for Windows client, plus the new features announced). It has a nice diff viewer, and can push/pull. But that's about it. The interface is beautiful, and the Mac app seems to look just as good. But any other advanced git features, you'll need to do through the command line.

I wonder why are there no good git GUIs that offer git's full feature set? I guess it's a harder problem than it seems. Or maybe just every dev who uses git's advanced features would just prefer to use the command line anyways.

I really wish GitHub would open source these clients. If not for community contributors to poke at (it's kind of funny that a client based around open source code collaboration isn't open source), I'd at least like to see the code behind the UI. Github for Windows 2.0 is absolutely beautiful, and Github for Mac looks to be just as good.

I've read somewhere that Github for Windows uses WPF for the UI. There are no good looking open-source WPF apps that I'm aware of, so I'm very curious as to how it was made.

You could try loading the assemblies up in dotPeek and poking around. You miss out on the XAML (though you'll see the code the XAML was transformed into), the compiler generated stuff for await is a little ugly, and obviously you wouldn't be able to re-use any of the code you see, but if you're just curious...
Nicely done! If someone from the GitHub team is reading this, is there any plan in the future to integrate "issues" into the desktop client? P.S. like the new style logo, seems Yosemite ready :)
I installed this today and now it crashes on opening
Why use it and not now Atlassian's SourceTree?