Git 2.13
github.com
github.com
> 'git stash save' now accepts pathspecs. You can use this to create a stash of part of your working tree, which is handy when picking apart changes to turn into clean commits.
I believe there may be a slight error in the GitHub blog post I quoted above: from what I can tell, it's actually the 'git stash push' command that now accepts pathspecs. But either way, still a neat new feature!
The vim-fugitive Gdiff is a really nice interface (imo) and a stash equivalent would be amazing :-)
:Gblame is particularly useful.
I don't use fugitive now but I do make full use of tig. In my .vimrc I have:
nnoremap <leader>gb :echo system("git rev-parse --abbrev-ref @ <bar> tr -d '\n'")<CR>
nnoremap <leader>go :silent !tig<CR>:silent redraw!<CR>
nnoremap <leader>gB :silent !tig blame % +<C-r>=expand(line('.'))<CR><CR>:silent redraw!<CR>
The above solution leaves vim purely for editing, and tig for doing the actual git presentation.Asciinema demo of tig blame: https://asciinema.org/a/4as7ujt8cpnpyx0doyrervatl
Just like fugitive, I can travel back and forth through history. And if I hit q, I'm back in vim.
I have commited with my work credentials to open source projects more times than I can count
Being able to set configs per directory provides a workaround.
Nevertheless, .gitignore should still be the first thing you learn about git :)
I'm surprised that didn't exist already. Several years ago, I worked on a tool to scan SVN merge history and save in a graph database so one could ask this type of question, "Does this branch contain the fix?". Or the opposite, "Which branches do not contain this fix?".
It was a mess because there were 8 million commits in the repo and clients ranged from SVN 1.4 to SVN 1.8 (the server was upgraded too).
It would have made more sense to use git for something like that but it's hard to get thousands of devs to switch.
Under those circumstances I'd probably use git svn, I always found git svn to be a better svn client than svn.
This allows for finding the last-good rollout tag given a known-bad <commit>. Given a hypothetically bad commit cf5c725, the git version to revert to can be found with this hacky two-liner:
(git tag -l 'v[0-9]*'; git tag -l --contains cf5c725 'v[0-9]*') |
sort | uniq -c | grep -E '^ *1 ' | awk '{print $2}' | tail -n 10
With this new --no-contains option the same can be achieved with: git tag -l --no-contains cf5c725 'v[0-9]*' | sort | tail -n 10
As the filtering machinery is shared between the tag, branch &
for-each-ref commands, implement this for those commands too. A
practical use for this with "branch" is e.g. finding branches which
were branched off between v2.8.0 and v2.10.0: git branch --contains v2.8.0 --no-contains v2.10.0
1. https://github.com/git/git/commit/ac3f5a346860b824e083c5d305...https://sourceforge.net/projects/git-osx-installer/files/?so...
git-scm.com says:
"You are downloading version 2.10.1 of Git for the Mac platform. This is the most recent maintained build for this platform. It was released 7 months ago, on 2016-10-14."
The person you replied to was asking specifically about the native macos packages linked from the git official website.
installing user-owned global software is a terrible idea.
The maintainers of homebrew are aware of both issues and simply don't care: they are not going to fix either, because they won't even acknowledge that they're actual problems.
This isn't just "its going to take too long", this is "fuck you, we know better than every OS vendor on the planet"
It's not like apt, yum or WU where the updates come from a trusted source.
Being single user doesn't make installing software user owned any less of a bad idea.
It's just a big git repository of recepies, which are exactly that. Instructions on how to combine things (source code, binaries, flags etc) from external sources.
Given that, it effectively is a central repo that is controlled by Homebrew.
Can you explain why you believe that?
Why do you believe that requiring administrator rights to install global software is "a terrible idea" ?
Every single OS-vendor provided software install mechanism on computing devices in use today uses this concept.
Keep in mind that I'm talking about installing, not building. No one sane suggests `sudo make && sudo make install`. It's always `make && sudo make install`. Homebrew not just doesnt do this by default, it prevents this model of building & installing, and won't even allow pre-build binaries to be installed as root.
2. Because there's no make uninstall.
I've had this argument with others who get similarly worked up about homebrew as you seem to. I think the problem may be that you're thinking about installing core system utilities, whereas we're talking about installing all our frivolous user-domain software. So whatever package we happen to have read about and thought "oh I'll try that out". Prior to using OS X for the last 6 years my personal laptop ran Linux for the 10 years prior to that. Not everything was available via apt-get, and I know from far too much first-hand experience the dangers of installing software with root permissions, and not being able to reverse the process, so there's really no question in my mind that you're wrong; I suspect we must be answering subtly different questions as I said above.
Can you explain why you're emphasizing global software? You sound like you're talking about being a sys admin for a shared computing resource. We are just talking about our laptops.
Very occasionally we put on the hat of "administrator" of our laptop, but mostly we have on the hat of "the single user".
Now, how about my question: if it's as bad as people like you say, then why does it work so well for so many people?
This is why there was a thing like `$PREFIX`. I have a ~/.local folder, the user-specific equivalent of the system /usr/ folder. All the frivolous software I install for my-unix-account local needs go in there and my OS remains pristine. I currently have my $GOPATH, user npm packages, and even some .desktop applications in there.
(EDIT: I didn't mean to sound like I was correcting you. In fact I'm sure you know this stuff better than me. I now see that there's both a commonly-honored environment variable "PREFIX" and the command-line option to configure I mentioned, and I'm going to claim that the fact that there's two degrees of freedom and I'd forgotten about one of them kind of backs up my points!)
If so, while I agree that that serves the purpose and avoids use of `sudo`, I would think that the following two drawbacks are severe:
1. It's a lot (really, too much?) to ask of the community of laptop users who wish to use command line utilities -- we don't want to make using the command line the province of real unix experts only; everyone is a beginner at some point after all.
2. Not all software will offer this option.
But the first reason you cited can be handled gracefully by package managers at least (including Homebrew), if only they took the effort.
homebrew-core/Formula$ grep 'system.*make.*install' * | wc -l
2774
I don't think I quite understand the complaints that the unix traditionalists have against homebrew. I don't mean to imply that there are no valid ones; I'd like to understand.From the limited number of times I had to set up homebrew, I noticed the official method tells the user to take over /usr/local/ (via a `sudo chown ...`). They could have made the process use ~/.local, but don't. And because of the official position on using /usr/local/, lots of homebrew formulae assume and depend on /usr/local/.
Without taking the side of the "unix traditionalists" you speak of, I can understand their point. Homebrew doesn't have to take over a system location for user-account specific software, but it does.
I'm not suggesting make as an alternative to a package manager, I'm saying that nowhere else is it considered OK to install global programs without requiring admin/root permissions.
I'm emphasising "global" software because homebrew installs to /usr/local/ by default, which is a machine global directory.
The issue with permissions is about security, and like most security problems, being bad/terrible has no correlation on userbase. How many people use {android,Windows,Wordpress,...} despite a terrible security record.
https://github.com/Homebrew/legacy-homebrew/pull/41595#issue...
Note that the maintainers response was: fuck it, the users can just re-complile this package every time they install it.
The linked builds from git-scm.com are built by https://github.com/timcharper/git_osx_installer (but hosted on sourceforge for some bizarre reason), however that repo seems a little inactive lately, bar issues from users.
Another thing to love about Mercurial: the project handles packaging, rather than relying on third parties to do their job for them: https://www.mercurial-scm.org/downloads
But that doesn't substitute for making an actual argument, which I notice you have failed to do in any of your replies to other people in this thread.
What is random about what I've said? I have very specific issues with Homebrew, and I'm pretty consistent in my complaints about it:
https://hn.algolia.com/?sort=byDate&prefix&page=0&dateRange=...
> which I notice you have failed to do
Perhaps need to notice what I actually write then, because I have made very specific complaints about the policies and actions of the Homebrew project/maintainers.
- There shouldn't be too many nor too few hash algos. Too many: paradox of choice, user confusion and interop overhead. Too few: security monoculture risks being broken by well-funded state actors
- Sane, future-ready default: SHA3-512
Also, git GPG signing should change to signing content, in addition to or instead of, hashes.
- Windows comes with bash
- Microsoft have an excellent openssh implementation on their github
- I don't want some dude's cool $PS1 and shortcuts and icons.
I just want git.
That's an extremely charitable way of phrasing it. 64-bit Windows 10 in developer mode has bash as an optionally installable component. AFAIK, bash is not installed by default and it's unavailable on 32-bit or in older Windows versions.
If you want to allow a wide range of users, including those with corporate- or government-IT issued machines, to run your build, you need to support older Windows versions down to at least 7. Which means that you cannot assume native bash.
Same page looks great on firefox so this is chrome shenanigans.
I would prefer they just do font-family: monospace