- I am currently auditioning smartgit after being dissatisfied with the gigabyte of RAM that gitkraken and sourcetree demand to do basic stuff. Free for non-commerical use. (closed-source, USD99/yr of updates, free for non-commerical use)
- gitkraken seems to be the sleekest and hippest, and runs everywhere. It also has the least horribly broken visualisation. It uses gigantic amounts of RAM. Rebase support is weak, visualisation is strong (closed-source, USD60/yr, free for non-commercial use)
- Sourcetree (closed source, free) is an adequate client on Windows and OSX, although it also uses gigantic amounts of RAM, and is just generally slooow. However, it also supports mercurial, which is nice. Powerful rebase support, but it might crash half way through the rebase, and it might be hard to do the rebase because they don’t sort commits or branches very well in the visualisation.
- git-cola is open-source, in python. Haven’t used.
- giggle (open-source, Linux/GTK only) seems to be purely a repository viewer, but that’s actually done really badly generally, so is not completely useless.
- sparkleshare is designed for file syncing for designers, not versioning code for coders, but is also effectively a neat git GUI, with attention from designers, which as I have mentioned is a bit of a weak spot.
git fetch remote branch git subtree add --prefix=subdir remote branch --squash
git fetch remote branch git subtree pull --prefix=subdir remote branch --squash git subtree push --prefix=subdir remote branch --squash
git checkout my_branch -- my_file/
In brief, this will purge a lot of stuff from a constipated repo in emergencies:
git reflog expire --expire=now --all && git gc --prune=now
bfg does that:
git clone --mirror git://example.com/some-big-repo.git java -jar bfg.jar --strip-blobs-bigger-than 10M some-big-repo.git cd some-big-repo.git git reflog expire --expire=now --all && git gc --prune=now --aggressive git push
e.g. you are editing a git repo on NTFS via Linux and things are silly.
git config core.filemode false
Use subtree split to prise out one chunk. It has a few wrinkles but is fast and easy.
pushd superproject git subtree split -P project_subdir -b project_branch popd mkdir project pushd project git init git pull ../superproject project_branch