This made me wonder, what use was diff without patch?
But then I remembered diff -e which produces an ed script. In the 5th and 6th edition the -e option was simply - https://man.cat-v.org/unix-6th/1/diff I guess the reason for the non-ed output is to include the text of the deleted lines.
The diff3 utility (which arrived in the 7th edition https://man.cat-v.org/unix_7th/1/diff3) can be used as a sort of combined diff and patch, again with the help of ed, but it seems a bit awkward.
I think merge arrived as part of RCS? at least, that’s the way it is packaged now. (POSIX has neither RCS nor merge https://pubs.opengroup.org/onlinepubs/9699919799/idx/im.html) Curiously I can’t find any sign of a merge facility in SCCS – maybe I am missing something; SCCS terminology is a bit weird.
The crucial ingredients for pre-git open source workflows are context diffs, plus patch. Including the context makes the diff a lot easier to review without applying it, and it allows patch to be much more robust against concurrent changes. As far as I can tell, diff -c first appeared in 4BSD in 1980 https://www.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/man/cat1... It predates the start of the CSRG SCCS history of diff.c https://svnweb.freebsd.org/csrg/usr.bin/diff/diff/diff.c?vie... As the maintainer of unifdef I am greatly amused by diff’s -Dstring cpp mode.
Diff is incredibly useful on its own. I use diff a lot, and I think 95% of my use of diff is to figure out what has changed without any intention to apply a patch.
Furthermore, it’s likely been 20 years since I used “patch” - I almost never apply an entire diff/patch, but rather parts of it interactively with kdiff3 or beyondcompare
Hillel Wayne posits that version control is the number one thing computer science/programming/software engineering has to teach to the other engineering disciplines. It wouldn't work without diff. It's really foundational for what it is we do, you know?
that's a really interesting idea. Many formats representing drawings like SVG and Kicad Schematics are text formats, not binary. They can be diffed, and it's a matter of rendering the diff as part of the drawing, not as text. I wonder if anyone is working on such a thing.
“ It’s the seed crystal of all workable open collaboration, and people living without it don’t even have the language to recognize how bad they’ve got it. “
As someone who has worked with proper version control et. al., but is often forced to work in other environments, I absolutely know how bad I’ve got it.
diff is a np problem and a real np problem in that most (all?) implementations are not good enough for everyday use. You will regularly get situations where it fails.
Compared to most np problems that just sit in a lab where they save a dollar on a working multi million operation by adding $$ worth of complexity.
It'd be interesting to see all the diff's of the world in an arena battling it out. Computer Science seems unable to invent new things since 1980 so we should be improving on what they discovered at least.
But then I remembered diff -e which produces an ed script. In the 5th and 6th edition the -e option was simply - https://man.cat-v.org/unix-6th/1/diff I guess the reason for the non-ed output is to include the text of the deleted lines.
The diff3 utility (which arrived in the 7th edition https://man.cat-v.org/unix_7th/1/diff3) can be used as a sort of combined diff and patch, again with the help of ed, but it seems a bit awkward.
I think merge arrived as part of RCS? at least, that’s the way it is packaged now. (POSIX has neither RCS nor merge https://pubs.opengroup.org/onlinepubs/9699919799/idx/im.html) Curiously I can’t find any sign of a merge facility in SCCS – maybe I am missing something; SCCS terminology is a bit weird.
The crucial ingredients for pre-git open source workflows are context diffs, plus patch. Including the context makes the diff a lot easier to review without applying it, and it allows patch to be much more robust against concurrent changes. As far as I can tell, diff -c first appeared in 4BSD in 1980 https://www.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/man/cat1... It predates the start of the CSRG SCCS history of diff.c https://svnweb.freebsd.org/csrg/usr.bin/diff/diff/diff.c?vie... As the maintainer of unifdef I am greatly amused by diff’s -Dstring cpp mode.