41 ms·
Magit Is Amazing
- glitchc 1y agoGit Extensions is amazing. Too bad it's only for Windows. As nice as Magit may be, it would be even better as a standalone TUI application. I don't want to have to learn Emacs to use it.
- anlsh 1y agoI've got [a bit of neovim config](https://github.com/anlsh/nvim/blob/8b61520a5ecd752427abffc4562e4053e7d2394b/init.lua#L252-L303 https://github.com/anlsh/nvim/blob/8b61520a5ecd752427abffc45...) which sends you straight to `neogit` (which is basically equivalent as far as I use it) when a certain env var is set. So in my .profile I've got ``` alias gg="NEOGIT_SLAVE=1 nvim" ``` It's definitely not perfect but it's good enough to work for basic committing/rebasing flows and it's faster than booting up emacs for the same purpose.
- ckolkey 1y agoRandom, but on line 266 map `P` to `false` not `nil` and it won't show up.
- iLemming 1y agoMagit would make no sense outside of Emacs, because it's not just an extension - it's also a bunch of libs anyone can use - the way how Emacs works allows you to re-use and modify any behavior of any function with extreme granularity. Practical example - while browsing GitHub in my browser, with a keypress I can let Emacs grab the current thing and operate on it - clone the repo, read files, review PRs and Issues, etc. I can even do these things directly from my notes, or when someone shares a url with me. This isn't part of Magit, these are my own customizations, but it would be much more difficult to achieve without Magit.
- torben-friis 1y agoI’ve always heard about how good magit is but… the article has no content? It’s just the author saying he’s thankful for it.
- ziftface 1y agoI've used it before when I used to use emacs and it's really neat and simple to use but I think lazygit is better. I think of lazygit as the spiritual successor of magit. If you're curious what that looks like you can see a descriptive video on their GitHub.
- eadmund 1y agoHe’s also saying that Magit is so good that he doesn’t recognise the complaints which motivate some people to switch from Git to Jujutsu. FWIW, I agree. Jujutsu seems fine, but Magit is fine too. Maybe Magit is the Blub of version control, and Jujutsu would change my life for the better, but … I seem to be able to run in circles around my Git-CLI–using colleagues as it is.
- weichi 1y agoupvoting not because I think the article is great, but because I want someone to tell me (a magit user) why jj is better than using magit to interact wit git!
- kccqzy 1y ago1. I don't want to crate named branches. Keeping track of branch names is extra effort I don't need. 2. `jj evolve` is excellent. 3. First-class conflicts. Even just deferring conflict resolution later is convenient.
- steveklabnik 1y agojj evolve hasn't existed for a long time, is that a typo?
- kccqzy 1y agoSorry. My bad. I confused it with `hg evolve`. Unrelated note: thank you for your jj tutorial!
- steveklabnik 1y agoNo worries! It is cool in hg, and may or may not make its way back into jj, we'll see :)
- steveklabnik 1y agoI am not an experienced magit user, (because I don't use emacs) so I can't really speak to this directly, but I can tell you what I understand to be the case. Here's the motivation for jj, described by its creator (this will be on the FAQ in the next release: The project started as an experiment with the idea of representing the working copy by a regular commit. I (@martinvonz) considered how this feature would impact the Git CLI if it were added to Git. My conclusion was that it would effectively result in deprecating most existing Git commands and flags in favor of new commands and flags, especially considering I wanted to also support revsets. This seemed unlikely to be accepted by the Git project. Fundamentally, jj is a different VCS, not just a UI layer on top of git. And so there's a lot of differences, but they sort of sound more generic than specifically "vs what magit gives you." I don't have time to be more lengthy at this exact moment, but I'll be curious to hear what others say, and I can come back and say more later if you're curious.
- raincole 1y agoI once tried to learn Emacs, but Magit's performance s on Windows was the last straw that made me give up. Yeah, I know I should have given up Windows instead...
- johanvts 1y agoIm using magit on windows for years now. It used to be that larger operations would completely clog everything up. They can still be annoying, but it’s not the dealbreaker it used to be.
- Babkock 1y agoWell, yeah. But where's the article? I would like to see more articles about the Emacs-universe.
- forrestthewoods 1y agoWhy is this top of HN? The article doesn’t even attempt to describe what Magit is or why it’s amazing? Very weird.
- arcanemachiner 1y agoHN is for nerds, the thing has "git" in its name, and you have access to Google. Your move.
- BeetleB 1y agoHN works by upvotes. Lots of HN users like: 1. Emacs 2. Magit 3. Jujutsu Just mention these three in a blog post and you'll hit the front page too!
- syhol 1y agoI've been fighting the git CLI for over a decade and I've recently picked up lazygit so I can relate to this post. A good TUI has made git a joy to use and when I did try to pick up jj last year it seems like too much learning for too little gain. I think git will be "good enough" version control for many years to come.
- kccqzy 1y agoI really really want a magit version of jujutsu. Apply the same philosophy but use jj commands to achieve it. Under the hood magit still runs git commands so there are still annoyances such as (1) the need to create branches and name them, or (2) having to resolve conflicts as they happen rather then deferring to a more convenient time in the future (first-class conflicts), or (3) the equivalent of `jj evolve` for automatic rebasing. Also I'll have to say magit simply chose much better names than git. I never understood the `--onto` argument of `git rebase` because it's such a bad name. On the other hand magit calls it rebase subset and it's immediately clear; I now use this kind of rebase almost every day.
- syhol 1y agohave you tried lazyjj? I was thinking about giving it a go.
- kccqzy 1y agoNo because reading its GitHub it doesn't seem better than magit.
- ricericerice 1y agojjui is definitely the best contender ive seen for a jujutsu ui. although, with the ergonomics of jj, and a decent merge editor setup like meld, i haven't really needed a ui at all
- BeetleB 1y agoWhat is `jj evolve`? It's not listed as one of their commands.
- steveklabnik 1y agoElsewhere in the thread they mentioned that they meant hg evolve. This feature was originally in jj but has been gone for a while, replaced with a simpler concept. Basically, when you modify a change, jj will automatically rebase all descendants. It’s super useful!
- mystifyingpoi 1y agoWhen I was early in my career, I always thought that Git is hard and nerdy, and it is a good thing. I kinda liked it in a way, like there is some gratification in knowing all the commands and helping clueless coworkers, or knowing how to do a rebase -i and shuffle commits around and show off etc. These days, I find myself just using the smallest subset of commands possible to do my job, and it is enough. Just add, commit, push/pull and occasional stash or merge is like 99.9% of my daily usage. I don't even remember how to revert (was it checkout -- <filename> or reset <filename> or restore <filename>?) and I'm just fine with it. I think that git is easy. Just learn the happy path, and maybe a way or two for restoring to a known good state without deleting the whole repo, it's enough.
- hinkley 1y agoI believe it was git that finally made me accept that my working memory is actually below average and that I’ve coped basically my entire life by leaning on my chimpanzee-like spatial reasoning and building mind [palace] for everything, especially architectural and network topology conversations (I became the reviewer and copy-editor for the network architect for a project I wasn’t even on because someone knew me better than I did). Graph theory works a treat with this so I become the de facto VCS surgeon. It’s “just” a big, fat, straggly, 4 dimensional tree. I try not to torture anyone with it (VCS repair) who hasn’t already exhibited a knack for graph theory. I just tell them where the man traps are and to ask if they feel like they need to go there.
- qiine 1y agomind castle/palace is a perfectly valid strategy
- 1313ed01 1y agoI agree, but partly for that reason I use fossil for most of my hobby projects. It is less stressful to not have so many features outside of the ones I use, and to not even have to be tempted to rebase or otherwise rewrite history as that is not supported. For work and all my older hobby projects still only use git and I used that for ages and know it quite well, but that does not mean I always feel like I need to use it instead of something simpler. (It is also FUN to use some other tool and not just git year after year. Got to learn something new now and then.)
- arcanemachiner 1y agoLazygit is amazing: https://github.com/jesseduffield/lazygit https://github.com/jesseduffield/lazygit I have no connection to this program, other than that I love it, and shill for it every time I get the chance.
- emerongi 1y agoYou can get comfortable with it in 5-10min and after that you will slowly discover that it does absolutely everything you could wish for. Today I'd honestly suggest to skip learning about git altogether (besides the basics, like branching, staging etc) and just start using lazygit immediately. I've seen people claim that having a clean git commit history is not worth the time, it takes too long to have it nice etc, opting to just stuff their refactor, renaming and new feature changes into one commit. With lazygit I spend a few extra minutes a day to make it nice and I've gotten compliments for it from others when they review my PRs, because it makes the review much easier.
- clockwork-dev 1y agoSecond this. Put off trying it for years because "why not just use a GUI" if I'm going to leave the console anyway. Turns out lazygit is kind of a happy middle ground and using it actually feels better than it looks.
- eschneider 1y agoI really only use lazy git to review my code before commit it and I inevitably his the wrong scroll key and split the windows in half when I didn't mean to and I have to quit and restart to fix it. That said, you'll pry that app from my cold, dead fingers.
- onelesd 1y agoare you talking about the diff hunk view? you can generally just smash Esc to back out of everything in lazygit
- spacebuffer 1y agoNeogit is a magit inspired client for neovim. really worth checking out
- jvreeland 1y agoI always see people saying magit is awesome but i really can't stand it. Especially the keybindings and transient which seems the main draw.
- iLemming 1y agoThat's some weirdest complain, sounds like standing in a fully stocked kitchen and muttering there's nothing to eat. You're using the pinnacle of malleable apps, why don't you just rebind the keys you don't like?
- jvreeland 1y agoI'll acknowledge that it's a strange comment and I could rewrite things to get the behavior I want and the reasoning is well explained by the author https://github.com/magit/magit/issues/1811#issuecomment-94157505 https://github.com/magit/magit/issues/1811#issuecomment-9415... But I find that there are cases in my workflow that I am more bothered by these things in magit than benefit I get from it.
- klodolph 1y agoI agree but the article doesn’t explain why. I’ve been using Magit at work because it’s what everyone uses, and it just does useful shit I need to do, like help me revert specific chunks from an old commit, or migrate chunks to a different branch, or whatever. Stuff that I know how to do in Git, but I’m tired and it turns out Magit is just a lot faster and more interactive. I have a long history of hating Git UIs but somehow Magit is the one exception. I’ve done a lot of surgery on Git repos in the past so I’m no slouch on the command-line, Magit just lets me do it all faster.
- hinkley 1y agoYour comment caught my eye because as the de facto neurosurgeon, I’ve watched way, way too many UIs glitch a coworker into an impossible or unpleasant state and been the only one who didn’t immediately break eye contact. And remember they had someplace else to be. From CVS to SortaSafe to P4 to SVN. By the time I got to svn and saw the same issues I started spending political capital on convincing people to only use the CLI or maybe, maybe, JetBrains. Usually the upvotes come from the casual users and the muttering from the heavy ones. In light of what I said, would you still recommend magit?
- BrenBarn 1y agoIt's an emacs package. That doesn't suggest "casual user" to me.
- hinkley 1y agoTFA does not mention that at all. I kinda feel like the downvotes are unwarranted.
- lanstin 1y agoTo emacs user, not knowing that magit is emacs is worth a down vote prima facie :) I share your horror for GUIs ineffectively hiding the version control reality; but then, despite being an emacs and casual magit user, I still mostly git add files one by one, having git diff the files one by one, and assembling the changed files into coherent groups.
- krylon 1y agoI used to use Fossil years ago, and I was happy with it. Then for work reasons, I had to start using git, and magit was what made switch from Fossil for my private stuff, too. I almost never resort to the git's CLI directly these days. The only pain point is that last time I checked (2020), it was painfully slow on Windows, but as I haven't touched Windows (other than doing a bit of tech support for my parents) since then, that is not a problem for me.
- johanvts 1y agoThe situation on windows is improved, not perfect but it is much better than it was.
- nogridbag 1y agoHow does Magit handle complex merges? The website shows simple diffs. In my experience, merging is something where a great UI can vastly simplify the process. I personally use SmartGit which I find is fantastic for diffs and resolving conflicts.
- johanvts 1y agoIt shows you conflicting files. I normally resolve each via ediff or my IDE and then go back to magit. It’s not a diff/merge tool.
- ashton314 1y agoEdiff and smerge are both fun to use in Emacs.
- iLemming 1y ago> How does Magit handle complex merges Like most of the things in Emacs - with variability that can suit [almost] every scenario - you can simply accept upstream or downstream changes with a keypress; use plain (line-by-line) diffing or 3way-merge diff UI; you can go through every hunk and precisely control things, while (if needed) rewriting the code; you can delegate the task to the external tooling; What's great is that all that is happening in your editor - you can always bring another window next to your conflict resolution to compare with context in a different branch, revision or stash; you can jump from a diff pointing to a file to open it in Dired - directory browser and editor, where you can also get the log of changes pertaining that file only (or any marked files and dirs in the filetree). You can even ask LLM to help you at precise point, by just marking a hunk and sending a request - without context switching, without losing your focus.
- 0xcb0 1y agoFully agree! Been using it for over 10 years by now, and it always was much more easier to use magit, than any other client. Let alone just cli. It's so intuitive and easy. I learned cherry picking in it, and an answer about that was one my highest ranked emacs stackoverflow answer. In the times when people still used that :D I am also very happy with it, and find 95% of task easy in git. Don't see me switching too. But I somehow need to make the branch graph a bit more modern.
- steveklabnik 1y agoMagit is great, and yeah, the jj team is aware that a lot of people wouldn't switch until there's an equivalent tool. It's true that there's more to jj than just the stuff magit gives you, but also, people should use the tools they find useful. If you're happy with magit, it's totally reasonable to keep using magit.
- theappsecguy 1y agoI would love to use magit buuuut I don’t want to have to learn emacs… is there any alternative path?
- bowsamic 1y agoWhy don’t you want to learn emacs? It isn’t very difficult. It’s never worth it to avoid learning
- kqr 1y agoYou can choose to not learn Emacs and still use Magit. Any LLM will teach you the necessary config and then Magit is its own set of keybinds and everything. You don't need to learn the JVM (beyond getting it installed) to play Minecraft and you don't need to learn Emacs to run Magit.
- ckolkey 1y agoFirst, install doom emacs. Second, create a shell alias for "magit" that is bound to "emacs -nw -f magit". Then just run magit like any other TUI app - the fact that it's in emacs is easy to forget. Or, if you're into neovim, there's Neogit, which is inspired by magit. And if you're not, there's https://github.com/altsem/gitu https://github.com/altsem/gitu
- mi_lk 1y agowould you say neogit or gitu offer a dx similar to magit, or are there fundamental gaps
- tretiy3 1y agogui app for linux with base magit features https://flathub.org/en/apps/io.github.aganzha.Stage https://flathub.org/en/apps/io.github.aganzha.Stage
- infinet 1y agoLearning Emacs is easy, I have done it many times... Nowadays I open Emacs exclusively for magit. I only know perhaps less than 5 magit commands, however, even use it for staging changes is such a huge leap and its chunk staging is indispensiable.
- michaelcampbell 1y agoI've been an emacs user for 30+ years, and magit for... ~5? I've recently been on a "I need to learn vim" kick and was all in, until I realized I might have to run emacs for JUST magit which I guess is fine. I settled for Doom emacs since it's in evil mode by default so I can still do both without running another process.
- meken 1y agomagit is the only thing I use Emacs for (well, sometimes I also use json-mode and json-pretty-print). I prefer Spacemacs though.
- TonyStr 1y agoAssuming you used neovim, did you try neogit? It promises to be a magit clone for vim, but I'm curious how faithful it is. I've never used magit, so I don't understand what's so nice about it. Would be interesting to hear a long time emacs user's opinion on neogit.
- michaelcampbell 1y agoI never used neogit so I can't comment. There are a couple things of magit that I really like; it's super easy to deal with individual hunks, and you have access to all the command line args of all the git commands. The defaults are sane, but you can get to the non-default stuff easy. (eg: force push with lease; diff ignore whitespace; commit amend, extend, --no-verify, etc.) It's all there, all the time. A lot of git UI's don't let you access those, or make you type the entire command to do it.
- ginko 1y agoI'm a long time emacs user and use magit as a fancy git-blame tool. Am I missing out on anything else it can do?
- johanvts 1y agoIts great for any git task. I think worktrees are often overlooked, magit makes it very fast to switch between worktrees. It’s great for debugging in two different commits in parallel and seeing exactly when some behavior differs.
- iLemming 1y ago> anything else it can do? 'It' can do virtually anything you want to get done. I'm not sure what you expect here, the laundry list of possibilities?
- ashton314 1y agoFor me, the magic in Magit is how its interface is perfect for new users as well as long-time power users: new users get helpful menus to show them what options are available, but the menus display instantly and are entirely keyboard-driven, so that long-time power users who know the keystrokes by heart are not impeded one whit. There's no trade-off between power tool and beginner-friendliness here: everyone gets all the goodness all the time. The interface builder has since been spun out as a separate library (and now included with stock Emacs!) called Transient, so there are several packages that leverage it. My favorite LLM interface (gpt.el) makes heavy use of transient menus. I've created my own transient menus for thinks like my PKM (Denote by Prot), my LSP client of choice (Eglot), and my citation manager (Citar).
- insane_dreamer 1y agoI use lazygit, ftw! However, PyCharm has a couple of git features that even lazygit doesn't have, which I find extremely useful: - compare commits from any two branches (lazygit is limited in that respect) - see the git history for an individual file - diff a file between two branches / commits
- iLemming 1y agoNot trying to snob you, just for didactic means: Magit easily does that and more: - Not only you can see the log for an individual file - you can trace the evolution of a given function. - You can diff not only branches, commits and files - you can diff them in reverse order, diff the changes since the last pull, etc. - From the diff you can jump to the file in Dired. Dired is an Emacs' "DIRectory EDitor" - it lets you not only browse, but edit the entire [nested] file-tree as if it is a wiki page (using all the tools like multiple cursors, search&edit, etc.) and then commit changes that immediately would be reflected in the filesystem. - You can mark some files and dirs in Diread and stage/unstage them, or even ask Magit to show the logs pertaining only those items. - You can reorder, squash, fixup, or reword commits quickly - Bisecting, cherry-picking, reverting, stashing, patching, etc., also very clean and intuitive
- insane_dreamer 1y agogreat feature list! but then I'd have to use emacs ...
- soraminazuki 1y agoEven if you don't use Emacs as your main editor, many things on Emacs are worth using on its own. Examples include Magit, dired, TRAMP, Org Mode, and countless things that build on top of it.
- benhurmarcel 1y agoSo that’s an article published as an answer to another article, but the author admits he “lost interest” and didn’t actually read the original article. And concludes that he probably doesn’t grasp all the aspects of what the topic is about, but he “doesn’t feel like it”.