Closed
Description
Discussed in #102
Converting back to an Issue so we can close it (spawning new issues if there are things undone).
Originally posted by masinter December 21, 2020
There are several problems with the way the project has and continues to misuse GitHub.
Fixing these requires more Git expertise than I have, and concerted effort. Let me assure you that each of these has a longer explanation than given here.
- Storing old versions as separate files in the repo. This refers to seeing
FOO
andFOO.~1~
in the repo. Doing this enables some workflows that are important, now, to be able to pluck out a previous definition with a simple `GETDEF(FOO FILE;3). There might be some way of doing the same with GiT but that doesn't matter unless we hook into the Git API. - This is a minor artifact of 1 but it has an easier fix. The problem is that the VM doesn't exactly follow EMacs' way of numbering versions. Emacs you see
foo
andfoo.~3~
then foo with no version is really version 4. Lisp instead makes an explicit hard link betweenfoo.~4~
andfoo
which is fine. Except Git knows nothing about hard links and treats them as two separate files, doubling the space (and Git hashes file names with contents so they don't help). A simple fix would be to write a quick script that scans through looking forfoo
andfoo.~nn~
same size and content then replace one with a hard link with the other. (This also would remove the annoyance of having an extra version pop up. - We're storing derived files that should be rebuilt -- compiled files (John had code to batch compile everything), sysouts, whereis.hash, exports.all. There are good reasons for each of these but it should be a goal for someone with no experience could rebuild from source. It's the only way That's separate from releases (which we're not using now).
- I didn't understand the git model (I still don't, but I've learned a few things): Move a bunch of files in. Add and commit. Then move them out. Git RM and then commit that. Then move them back in. etc. Multiple copies.
- A diff that worked for lisp. And things like that. shellcommand git commands that work with lisp file names
- LFS of sysouts might help a little, but 1 and 2 and 3 and 4