I have doubt it'll happen. GitHub/GitLab culture is pretty strong, few seem interested in having distributed project management features.
This sounds like it adds a ton of potential problems and solves some very minor ones:
* You can work offline. Great, but 90% of bug tracking is sending messages to other people so that's not particularly useful.
* You aren't tied to GitHub Issues or whatever. I guess that's good. Seems pretty marginal though.
> Do I now have to resolve conflicts in bug conversations? > Am I going to find replies magically appearing before mine?
actually, no! git-bug objects embed a lamport timestamp [0] to handle time-based ordering, and actions like comment posting and editing are tracked as "operations", applied in order, and you will never have to deal with a merge conflict.
the data model documentation [1] provides deeper insight into how we handle time, describe why you'll never see a merge conflict, and more. through this post, i've gathered that many people would prefer this sort of documentation be made more visible in the README (instead of "buried" under //doc). the README is probably a bit too high level for a more technical audience, but i appreciate your feedback here, and will take it into consideration as the README is refactored.
[0]: https://en.wikipedia.org/wiki/Lamport_timestamp [1]: https://github.com/git-bug/git-bug/blob/bd936650ccf44ca33cf9...
> Am I going to find replies magically appearing before mine?
- git-bug use a form of logical clock (not wall clock) that order an action in relation to other actions in the repo. Clock drifting doesn't matter.
- pushing to git usually require some access to the repo, and therefore abuse can be dealt with socially (aka you get kicked out)
What can happen for example is someone write a comment, shut down the computer and only push the next day, but in that case the comment showing up before yours is the correct merging.
Wait, so to comment on an issue I now have to already have push access to that repo? How does that work? E.g. what if I want to comment on a VSCode issue? I'm not a VSCode developer...
With a single binary deployment, you'd just need a bit of config and a DNS, and you could host a forge-ish for your project.
We are not there yet but it's really not far.
- install git-bug
- create a directory (and `git init`), optionally fetch/clone the remote repo (but this is not needed)
- create a git-bug identity (`git bug user new`)
- configure a bridge to (for example, using vscode) github (`git bug bridge new`)
- pull issues from the bridge to your local repository's refs/bugs namespace (`git bug bridge pull`)
- create a new issue, or browse existing ones and comment on them at will
- export your activity to the bridge (`git bug bridge push`)
this works without push access to the repository, because when importing to or exporting from a bridge, the API credentials you provide when configuring the bridge are used -- `git bug bridge {push,pull}` does not push your local `refs/bugs` to the remote.
edit: re-read your comment and i see what you're getting at.
yes, there is the chance that you don't interact with the remote for X days, and neither does someone else, and when you both finally do, their comment will "magically show up before yours" because in reality they _did_ leave the comment before you.
this is not dissimilar to looking at normal git commits ordered by "author date" vs. "commit date", and seeing "weird date ordering" in a linear tree.
git-bug shows items in "the real order", so in a workflow where you are not fetching frequently, yes, other peoples' activity may be applied before yours when you finally do.
this is just like on a centralized platform like github, where if you are writing a lengthy response or review of a PR, you can end up posting it and requesting changes or approving it after the PR has been merged.
This is wildly exciting.
I never used it seriously, but the concepts are easy enough to grasp.
Have a separate dedicated branch that contains all the metadata of your project. Like issues, todo-list, review comments, etc...
Hopefully, something decentralised like this could become more popular maybe.
It’s unclear to me what you mean.
i recently rewrote the README because i felt like its previous iteration was a bit _too_ dense. i may have gone a bit overboard on moving things :)
FWIW, the screenshots you're looking for currently live in: https://github.com/git-bug/git-bug/blob/bd936650ccf44ca33cf9...
I understand that documentation can be hard and you need docs for newbies and long time users, but as a newbie I cannot for the life of me figure out what this is.
is a "magit module" roughly synonymous with a vim plugin? if so, then would shelling out to the CLI work?
EDIT: "rich terminal users interfaces"
Text User Interface
Some days ago, on the Firefox mover to github topic, people were wondering if issue trackers should also be distributed.
Seems an interesting idea.
Similarly things like automatically promoting bugs into the test suite as SHOULD FAIL and so on
You can find creation here https://github.com/git-bug/git-bug/blob/master/doc%2Fmd%2Fgi...
And status update here https://github.com/git-bug/git-bug/blob/master/doc%2Fmd%2Fgi...
Other projects also make use of alternate namespaces. The oft-forgotten built-in "git notes" puts stuff in the `refs/notes/` namespace (specifically in `refs/notes/commits`). Gerrit uses the virtual `refs/for/` namespace for receiving commits for review, stores project config in `refs/meta/config`, and stores User data in `refs/users/` in a special repo [2]. I'm sure others do interesting things.
Alternate uses of git's DAG model are fascinating.
[1] https://github.com/git-bug/git-bug/blob/bd936650ccf44ca33cf9...
[2] https://gerrit-review.googlesource.com/Documentation/config-...
See also https://github.com/git-bug/git-bug/blob/master/doc/design/da... and https://github.com/git-bug/git-bug/blob/master/entity/dag/ex...
I'd love to see this used in the wild for other use cases.
If all information for an asynchronous development process could be stored into git and distributed by it, this would be a very good idea for many projects.
The same way, one could add support for code review (aka PRs), todo list, custom entities that your workflow need (say, tracking documentation or custom requirement) ... It can also be entirely outside of the development process.
- TUI recording (GIF): https://github.com/git-bug/git-bug/blob/master/doc/assets/tu...
- Web comments (PNG): https://github.com/git-bug/git-bug/blob/master/doc/assets/we...
- Web feed (PNG): https://github.com/git-bug/git-bug/blob/master/doc/assets/we...
the bridges exist within git-bug to support adoption of the tool and interop with existing platforms.
`git bug bridge pull` and `git bug bridge push` use the bridge's API, and don't attempt to pull from or push to the git remote.
All I would like as a nice-to-have is support for making those issue keys that I use automatic. For me it’s all local to me so it doesn’t need to be globally unique. But those N-letter prefix does make collision less likely on a single project. I’ve mentioned it here: https://github.com/git-bug/git-bug/issues/75#issuecomment-19...
How do you handle conflict resolution when multiple users modify the same issue or thread concurrently across remotes? Is it purely Git's merge mechanics, or do you apply any domain-specific heuristics?
git-bug embeds a "lamport timestamp" [0] - that is, a logical clock, not a wall clock - in each operation (like the creation of a bug, or a comment, or an edit to a comment). this, combined with the data model [1] we use, allow activity to be recorded and replayed without ever encountering a merge conflict.
[0]: https://en.wikipedia.org/wiki/Lamport_timestamp
[1]: https://github.com/git-bug/git-bug/blob/master/doc/design/da...
Imagine having repository issues seamlessly propagated and replicated across all your git mirrors.
right now, git-bug has built-in bridges for github, gitlab, and jira. i am working on the design for a more modular system in which bridges can be built by anybody and used as "plugins".
really, though, the better, long-term goal is to work with $PLATFORMS to have them update their issue tracker to use git-bug's issues (that is, read from and publish to the refs/bugs namespace using git-bug). there's a bit missing right now to make this easy, but it's something that's very much top of mind as i think about git-bug's future.
I appreciate that tools like Git Bug are not tied to a single repo host but they are tied inherently to a single VCS (git). BE was not reliant on a specific VCS, and it's a *really* simple format on-disk too.
Or you could just as well plug a generic database there.
[1]: https://github.com/git-bug/git-bug/blob/master/repository/re...
I especially hate how they've integrated CI/CD into the Git platforms.
I loathe the fact that Microsoft has tied their AI to their Git platform.
I want my CI/CD to be agnostic. I want my AI to be agnostic. I want my issues, MRs, comments, etc to be decentralized and come along for the ride when I clone a repo.
The pressures for this aren’t even explicitly corporate interest anymore, a lot of it is driven by non-software-experts who are kind of forced to participate in software dev (e.g. your friendly data science colleague who used to be, say, in material science or astrophysics), which is completely understandable. But more concerneing is the trend of actual software engineers who dislike consoles, terminal programs, and basically don’t believe much in understanding their tools.
You see this all the time with basic stuff from git UIs to kubernetes in IDEs. Productivity isn’t really the issue, although it’s always mentioned as an excuse, there’s just a big appeal to reducing any/every cognitive load no matter what the practical cost is for losing understanding/fluency. To give people the benefit of the doubt though, maybe this pressure is ultimately still corporate though and it started with the call for “full stack” devs, continued with devops/platform engineering etc, where specialists are often actively discouraged. Laziness and a higher tolerance for ignoring details may be a necessary virtue if the market forces everyone to be a generalist.
1. It may push the design boundaries, but a basic full text index with sqlite would be doable with the web interface. go-doc CLI does the same with the web UI. all indexing is client-side . The bug corpus is very small so indexing should be fast and consistent.
2. Tagging bugs with the observed and resolved git commit ID. that would improve bisect, merge, release management and changelog publication.
hungryhobbit•2mo ago
It sounds like you can "bridge" to somehow show the tracker outside Engineering, but then you're having to do work around the consolidation, and I'd imagine the result won't be as nice as a full-featured tracker designed for everyone to use.
But, I am curious to hear from someone who has actually used this thing.
hungryhobbit•2mo ago
jFriedensreich•2mo ago
Not only interoperability but backups, tooling, distributed workflows and everything in between would work consistently and the same way.
That said, I cannot count the times this concept was brought up and tried to make work but despite how much i love the idea in theory, i have yet to see a way it could work in practice.
Some of the issues: - no universal agreement on exact schema, feature set and workflows, do the competing implementations break each other? if its not interoperable why even bother vs just using an external solution
- how to handle issues not associated to one specific repo or to multiple repos, splitting repos etc.
- how to not confuse devs seeing issue branches or wherever the actual data is stored in the repo
- how to best make this usable to non devs
The list goes on
cryptonector•2mo ago
That's the interesting question. Normally a bug tracker would basically be a SQL application. When you move it into a Git repo you lose that and now you have to think about how to represent all that relational data in your repository. It gets annoying. This is why for Fossil it's such a trivial thing to do: Fossil repositories _are_ relational and hosted on an RDBMS (SQLite3 or PG). If you don't have a SQL then referential integrity is easy to break (e.g., issues that refer to others that don't know they're being referred to), and querying your issue database becomes a problem as it gets huge because Git doesn't really have an appropriate index for this.
What one might do to alleviate the relational issues is to just not try to maintain referential integrity but instead suck up the issues from Git into a local SQLite3 DB. Then as long as there are no non-fast-forward pushes to the issues DB it's always easy to catch up and have a functional relational database.
Git-Master•2mo ago
1. Fossil repositories are explicitly not relational, they are however stored in SQLite databases. The data model for everything SCM-relevant (that also includes all content like tickets, wiki, forum) is stored as artifacts in a blob table (+ delta), which references other artifacts by hash value, and that provides the referential integrity. That, and the code that handles it. There are relations (via auxiliary tables) to speed up queries, but these tables are transient, get updated by inserting new artifacts, and can be regenerated from the artifacts.
(Users and their metadata, and configuration is not part of this scheme, so these tables might be viewed as relational tables. They are local-only; and not synced.)
See https://fossil-scm.org/home/doc/trunk/www/fossil-is-not-rela... and https://fossil-scm.org/home/doc/tip/www/theory1.wiki for more details.
2. There are no other databases like PostgreSQL to choose from.
cryptonector•2mo ago
I thought that Fossil did or at least aimed to support different SQL RDBMSes. Did that go away at some point?
chungy•2mo ago
That being said, it's the only existent implementation and none other are planned. If you'd like to port it to PostgreSQL, go for it, but it probably would lose a lot of the appeal of being a distributed version control system.
jFriedensreich•2mo ago
sshine•2mo ago
> just not try to maintain referential integrity but instead suck up the issues from Git into a local SQLite3 DB
Applications with SQL backends tackle the problem “how can we express our CRUD datastructures so they fit the relational model?
When you replace SQL with a file-based serialised format, you mainly lose ACID. This is arguably easier than SQL.
You are a single user locally: as long as your IDE plugin doesn’t fight with your terminal client, your need for ACID are low: you handle conflicts like git conflicts, but you may apply domain-specific conflict resolution; while conflicts in source code has no general resolution strategy, merging issue comments can be easy; changing issue status when people agree can be automatically resolved; handling conflicts manually can be tool-assisted.
So losing SQL is not that big of a deal, assuming you’re in a highly decentralised, highly async environment.
The answer to “Why though?” should be forge interop, keeping knowledge in-repo, and because it may fit the organisation (or lack of), e.g. just like you can commit code changes offline, you’re not prevented from updating issues when you’re offline.
cryptonector•2mo ago
I addressed that in a different sub-thread. This one was about "why would you do it any other way?". My commentary about relational data in non-relational media was specifically about why do it any other way. There are great advantages to doing what TFA does -and I acknowledged that in a different sub-thread- but it's still interesting to consider what gets lost, and how to get some of it back.
cryptonector•2mo ago
The point here is to be able to work with issues, PRs, and wikis offline just as one is now used to doing with code. And to use the same underlying content-addressed version control tooling for all those things.
freddie_mercury•2mo ago
I'm pretty sure Aegis did it 15 years before Fossil.
tasuki•2mo ago
Not being Jira is already a huge benefit. It says offline, local first. Isn't that nice?
hosh•2mo ago
bluGill•2mo ago
baq•2mo ago
XorNot•2mo ago
For example every project code drop down has this experience: my manager tells me what project code to put everything against, then I always pick the same option. Sometimes I've not been granted access to that option and waste a bunch of time getting that turned on.
At no point was any part of this necessary, because I neither defined the ticket, or could select the project code for myself, but we're all engaged in an elaborate game pretending I had agency over it.
AndrewDucker•2mo ago
account42•1mo ago
pixl97•2mo ago
Or to put it another way, those other 'useless' fields that take minutes may save the company hours of time in places that you don't see.
MonkeyClub•1mo ago
But there's U and I in unity!
/s aside, you have a valid point there: just because "I" find the field useless, it doesn't mean that it isn't out to actual good use downstream.
account42•1mo ago
devrandoom•2mo ago
whateveracct•2mo ago
dcrazy•2mo ago
nine_k•2mo ago
It's hard to make a product that's all things to all people, and it's wise to make a product that has a well-understood, if more narrow, audience.
chungy•2mo ago
[0]: https://fossil-scm.org/home/doc/trunk/www/index.wiki
ndegruchy•2mo ago
It just needs some more 'modern' themes
debugnik•2mo ago
My chance at sharing Fossil is not Relational. The two times it's been submitted to HN it didn't gain votes.
https://fossil-scm.org/home/doc/trunk/www/fossil-is-not-rela...
ndegruchy•1mo ago
Plus, the only thing I need to do to transfer it to a new disk or network location is to move the `.fossil` file, since everything is nicely self-contained.
sudoforge•2mo ago
git-bug has a web ui that you can run on your git server, for example, that can be accessed through a browser.
it's fairly limited in functionality right now (create, comment on, and manage issues), but one of my goals is to refactor it to improve coverage of the existing features, and to add support for things like:
- authenticated access
- unauthenticated/anonymous access (e.g. a public, external contributor/user)
- issue privacy levels
- sprints, projects, report generation
layer8•2mo ago
The monolithic web-first (often web-only) systems are a bit of a modern bane, you’re stuck with whatever user interface the one company/maintainer deems appropriate.
baq•2mo ago
eikenberry•2mo ago
crabbone•2mo ago
From QA perspective, which is the one the closest to me: I wanted such a tool for many years, and even though I haven't tried this specific one, I endorse the idea with both of my hands.
In the context of QA, it's always a problem to coordinate between test development, feature development, feature description, and tracking the work progress. All bug trackers I used to date are awful at it. This has a potential to solve at least part of the problem by being physically connected to the work done by either development or QA, or, ideally, both. The holy grail here is the ability to determine what tests to run in response to a commit without making it too much of a burden on the committer.
Tests can easily be the most expensive ongoing activity a development company may undertake. In this context, being able to avoid running useless but expensive tests is very desirable.