sapling
go-git
| sapling | go-git | |
|---|---|---|
| 61 | 23 | |
| 6,654 | 7,074 | |
| 0.8% | 1.7% | |
| 10.0 | 9.7 | |
| 4 days ago | 5 days ago | |
| Rust | Go | |
| GNU General Public License v3.0 only | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sapling
- SourceFS: A 2h+ Android build becomes a 15M task with a virtual filesystem
The headline times are a bit ridiculous. Are they trying to turn https://github.com/facebook/sapling/blob/main/eden/fs/docs/O... or some git fuse thing into a product?
- Jujutsu for Everyone
You might be interested in how this problem was solved by our team at Meta, in EdenFS (https://github.com/facebook/sapling/blob/main/eden/fs/docs/O...) and Watchman: https://github.com/facebook/watchman.
What you're describing is reasonably similar to EdenFS, except EdenFS runs in userspace.
Watchman layers a consistent view of file metadata on top of inotify (etc), as well as providing stateless queries on top of EdenFS. It acts as a unified interface over regular filesystems as well as Eden.
Back in the day, Watchman sped up status queries by over 5x for a repo with hundreds of thousands of files: https://engineering.fb.com/2014/01/07/core-infra/scaling-mer... I worked directly on this and co-wrote this blog post.
In truth, getting these working was a very difficult systems problem with a ton of event ordering and cache invalidation concerns. For smaller repos, it is much simpler to do linear scans. Since it is really fast on modern hardware anyway, it is also the right thing to do, following the maxim of doing the simplest thing that works.
- Ask HN: Why Did Mercurial Die?:(
It's not really anything like Mercurial anymore. It superficially resembles "hg" but it's a very hacked fork. It's more like sappling. https://sapling-scm.com
- Sapling Version Control System
- Jujutsu for Busy Devs
How does this compare to sapling? https://github.com/facebook/sapling
- Sapling
- Pyrefly vs. Ty: Comparing Python's Two New Rust-Based Type Checkers
Coming from a Meta background (not speaking on behalf of Meta):
"package/dependency management" - Everything is checked into a monorepo, and built with [Buck2](https://buck2.build/). There's tooling to import/update packages, but no need to reinvent pip or other package managers. Btw, Buck2 is pretty awesome and supports a ton of languages beyond python, but hasn't gotten a ton of traction outside of Meta.
"linting, formatting" - [Black](https://github.com/psf/black) and other public ecosystem tooling is great, no need to develop internally.
"why is type checking the exception" - Don't know about Astral, but for Meta / Google, most everyone else doesn't design for the scale of their monorepos. Meta moved from SVN to Git to Mercurial, then forked Mercurial into [Sapling](https://sapling-scm.com/) because simple operations were too slow for the number of files in their repo, and how frequently they receive diffs.
There are obvious safety benefits to type checking, but with how much Python code Meta has, mypy is not an option - it would take far too much time / memory to provide any value.
- Firefox Moves to GitHub
Is it still used there? I know they did in the past, but reading up a bit on the background on all of this I found https://github.com/facebook/sapling
- Pyrefly
Sapling is actively developed, not "dead after 3 months": https://github.com/facebook/sapling/commits/main/
Have not tried building Buck2 (no personal use for it), but its also actively developed: https://github.com/facebook/buck2/commits/main/
- The next generation of Bazel builds
https://github.com/facebook/sapling/tree/main/eden
I'm still unsure if a complete, viable eden solution was released with all of its necessary components.
go-git
- In the long run, GPL code becomes irrelevant (2015)
Notably, libgit2[1] is GPLv2 with a full linking exception, while e.g. go-git[2] is Apache2.
[1] https://github.com/libgit2/libgit2
[2] https://github.com/go-git/go-git
- A highly extensible Git implementation in pure Go
- Technical Deep Dive: How We Built the Pizza CLI Using Go and Cobra
One of the main libraries we use in the Pizza-CLI is the go-git library, a pure git implementation in Go that is highly extensible. During CODEOWNERS generation, this library enables us to iterate the git ref log, look at code diffs, and determine which git authors are associated with the configured attributions defined by a user.
- Show HN: Gogit β Just enough Git (in Go) to push itself to GitHub
I interpret "aims to be fully compatible" as meaning the operations it implements are intended to be compatible with how Git implements those operations. I do not interpret this statement as saying they implement all features of Git.
They offer a document which directly shows what is and isn't supported, and it specifically notes quite a few things that aren't supported yet: https://github.com/go-git/go-git/blob/master/COMPATIBILITY.m...
The godoc also says right upfront it "nowadays covers the majority of the plumbing read operations and some of the main write operations, but lacks the main porcelain operations such as merges." - https://pkg.go.dev/github.com/go-git/go-git/v5#pkg-overview
> I'm saying it's not a reasonable choice over just using git directly, and is unlikely to ever be.
OK, that's apparently true for your use-case. But again, what go-git implements is directly useful to a number of very popular projects, as well as literally two thousand less popular ones.
I find the exported functionality to be high quality, at least for my own use-case. I'm not commenting on the code quality. If I need a shed for bikes, and someone is giving out free but ugly bikesheds, I'm thankful. I don't complain about the color of the bikeshed.
- [Golang] Ejecutar comandos Go-git sobre SSH
- Git framework/library for Java
The go frameworks has some particular limitations at the moment (merge, rebase https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md) but overall great framework.Used for some go tools..
- Go-Git: A highly extensible Git implementation in pure Go
- Auto fetch config from Git
You can monitor the sha of your config repos main branch with this I expect. https://github.com/go-git/go-git
- Is there a way to clone remote git repositories programmatically with go, without the need to import a whole dependency for that?
I'm remaking a package named owl. One of the features of this package is the ability to clone remote repositories. The first time I affront this problem, I solved it using go.Cmd and git command. Is there a way to achieve something similar without importing or using a dependency like go-git. Something like download files via http, ssh or something similar.
- Git as back end for applications like Figma and Google Docs
I think there are already some Git SDKs out there. For example https://github.com/go-git/go-git
What are some alternatives?
hermit - Hermit launches linux x86_64 programs in a special, hermetically isolated sandbox to control their execution. Hermit translates normal, nondeterministic behavior, into deterministic, repeatable behavior. This can be used for various applications, including replay-debugging, reproducible artifacts, chaos mode concurrency testing and bug analysis.
watchman - Watches files and records, or triggers actions, when they change.
dulwich - Pure-Python Git implementation
githooks - π¦ Githooks: per-repo and shared Git hooks with version control and auto update. [β©Star] if you're using it!
jj - A Git-compatible VCS that is both simple and powerful
git2go - Git to Go; bindings for libgit2. Like McDonald's but tastier.