I’m a professional developer. I think in terms of delivering software and maintaining it.
From that perspective, Pijul is a non-starter for me, because when I look at the repo and see just a long tower of patches (which can be reshuffled at every moment), I become very confused and scared. If I have deployed that project yesterday, does the deployed code look anything like I see in the repository now?
One of the most valuable features of GitHub is to see the code at a certain version. Or, when looking at a commit, to see which versions was it included in. Neither feature is available in Pijul. Branches are not the same thing, they are not fixed in stone.
The reason that “patch chain” model did not yet win over the “snapshot” model is because there is a lot of value in thinking of the code in terms of frozen snapshots. Being able to reshuffle and merge the changes during the development is nice, but: the code needs to be released, reviewed, audited. And all that is best done with snapshots.
So, in practice, what I’d like to see before I even consider using Pijul for any project is some serious tag management. Use cases: create a tag (=unambiguous snapshot of the code + history of all the patches included), list tags, see the patches included in a tag, see all tags that include a patch, diff between tags, update a tag (ideally with preserving the history of updates).
As I understand, these features should be (mostly) supported by Pijul’s internal model. But, right now, pijul tag
is almost undocumented, and pijul dependencies
is not documented at all, and tags are nowhere to be seen in Nest. If I start a new project in Pijul, how can I reliably manage releases?