6 ms·
My complaints with git are a bit different, having never felt the burden of giant monorepos (but it's definitely related) git was built as a tool for completel
by rakoo 6y ago
My complaints with git are a bit different, having never felt the burden of giant monorepos (but it's definitely related)
git was built as a tool for completely distributed source versioning, but most of us are using it in a centralized way. It's nice to be able to work offline, but when we need to synhcronize there's always a huge dance of fetching first, see if it has moved, merge/rebase, etc... git is good at storing what we did, but it doesn't help at all at saving what we are _doing_: all changes to the working directory are ephemeral, like files stored in ramfs. When working on public repositories, you can't push a branch prefixed with your name; you have to fork the whole project _and_ push a branch before you can start interacting. Instead of having one server and a client, you now have 1 central server, 1 other server that only _you_ can access and will in practice contain 1 branch, and will be abandoned as soon as you're tired of it, and a client. Rights can't be managed at the branch level, so I'm just going to copy-paste the whole thing from the beginning of history and give it to you.
What I would like to see in a VCS:
- There is one central place where people coordinate
- There is exactly one commit associated to a branch, and that association is the same on all machines at the same time (I don't want to git fetch)
- If you want to do changes to a branch, you do a sub-branch
- That sub-branch, along with your local changes in or out of the staging area, is synchronized to the server. If authorized, other clients can have a view of those as well
It seems it already exists with fossil (https://fossil-scm.org/home/doc/trunk/www/concepts.wiki#workflow https://fossil-scm.org/home/doc/trunk/www/concepts.wiki#work...) and with older SCMs, although older SCMs are plagued with the locking problem.
In a way the work that is done to handle giant monorepos is helping git move in this direction: all branches are automatically synchronized, and the vision with this kind of repo is that it's ok to commit often, even in small batches. But it's not quite there yet. I've read an account of how things are done in Google (https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext https://cacm.acm.org/magazines/2016/7/204032-why-google-stor...) and it's closer to my dream system.
- felipelemos 6y ago> When working on public repositories, you can't push a branch prefixed with your name; you have to fork the whole project _and_ push a branch before you can start interacting. I believe this is more of a issue with GitHub then with git itself.
- rakoo 6y agoYes, but it's a model that every github clone has copied since, and it's a problem in the overall process of developing. Even gitlab doesn't have notions of rights per branch. gitolite can do it but sadly its model hasn't taken on the dev world. Still, it's not enough in my taste because I want all content to be synchronized everywhere
- dreamcompiler 6y agoSounds like you want what I want: A system where code development has the automatic synchronization and backup of Dropbox, coupled with the programmer-controlled atomic change sets, branching, and merging of git.
- rakoo 6y agoExactly. Have the "local changes" in Intellij be synchronized, and let the developer rearrange them for commits.