
GNU Emacs conversion to Git - kfogel
http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg00548.html
======
talles
A little more context here: [https://lists.gnu.org/archive/html/emacs-
devel/2014-01/msg00...](https://lists.gnu.org/archive/html/emacs-
devel/2014-01/msg00005.html)

------
apetresc
I'll admit, I had no idea Eric S. Raymond was still actively involved in emacs
development.

~~~
abusque
He's not really actively involved, though. He's just been on a crusade lately
to eradicate unwanted VCSs still used in older projects, including CVS for
NetBSD and bzr for emacs. Honestly I'm glad he's doing it, I'm hoping it might
make it more likely for newcomers to contribute to these projects. He has
posted quite a few articles about these conversions on his blog [0], if you
want to read about it.

[0] [http://esr.ibiblio.org/](http://esr.ibiblio.org/)

~~~
vezzy-fnord
Wonder if he's tried to evangelize on the OpenBSD mailing lists yet? The
smackdown from Theo would be amusing.

To some extent, it's good he's doing this. To another, very few VCSs other
than SCSS can really be called "obsolete", just primitive. Most of the time,
people who go on about VCS migrations seem to be just bikeshedding and can't
seem to give out specific justifications other than listing features that the
upstream project likely doesn't need. It's not trivial either, changing a VCS
often means changing the entire way a project is structured, for often
uncertain gains.

~~~
syntheticnature
Well, I can pick on OpenBSD's favorite: CVS repository corruption does happen,
but CVS has no active integrity checking. You'll only detect it if you go far
enough back... or run a conversion program. If you're lucky, you discover
while it's covered by backups, but these issues can sleep for years. This
caused a migration I was involved with to just become a scrape, as the code at
the tip was fine.

(I'd also say that atomic commits are an excellent reason to leave CVS behind,
but that can be argued.)

~~~
x0x0
been there, done that, shit seriously sucked

you should never use a vcs that has no ability to ask "is this repo in a valid
state", or you may try to checkout the point version released to a large
customer and be unable to do so. Data corruption can happen, even on raid
drives (we're pretty sure it was a bug in the controller, but that doesn't
change the effect.)

------
tobiasu
Finally you guys can all start sending patches to emacs. /s

~~~
mongrol
Yep, first up. Replaceing elisp with javascript!

~~~
malandrew
Why? Scheme would be a better choice.

~~~
Spidler
Why not all three? All implemented in Threaded Intercal, just to be
maintainable?

------
jaybuff
Apparently the only feature emacs is missing is spellcheck.

~~~
elwell
Flyspell, but good luck getting to run in MS Windows.

~~~
ww520
Here's my .emacs setup for spell checking in Windows [1].

    
    
        (setq-default ispell-program-name "c:/Aspell/bin/aspell.exe")
    

For on-the-fly spell checking in various modes.

    
    
        (add-hook 'org-mode-hook (lambda() (flyspell-mode 1)) )
        (add-hook 'text-mode-hook (lambda() (flyspell-mode 1)) )
    

[1]
[http://www.emacswiki.org/emacs/AspellWindows](http://www.emacswiki.org/emacs/AspellWindows)

------
unwind
Actually that was yesterday. :) I was confused for a moment, starting to think
ESR was due east which is not expected (I'm in Europe).

[http://savannah.gnu.org/git/?group=emacs](http://savannah.gnu.org/git/?group=emacs)
looks valid although I didn't try cloning.

------
dschiptsov
bzr is so strange. If its connection got stalled (third-world GSM or WiFi) its
"stream" would hang. If a process has been killed due to a signal, garbage
would remain. And if you run bzr check it will use about half GB of traffic,
as if comparing the whole repo byte-by-byte.

git is much saner.

~~~
tedks
And yet, this is the help page for git push:

    
    
            Updates remote refs using local refs, while sending objects necessary to complete the given refs.
    

That's helpful! Thanks Git!

~~~
kinghajj
And for hg it's:

> Push changesets from the local repository to the specified destination.

:s/changesets/objects :s/local refs/local repository :s/specified
destination/remote refs

Is it really that much less easy? Both require that you understand the
nomenclature chosen by their respective systems ('objects'/'changesets',
'refs'/'repository').

~~~
tedks
A change set is a set of changes.

An object is totally unspecified.

I know what a repository is when I work with version control. I've been using
version control for years and I never was confused about what the repository
was.

What the fuck is a ``ref''?

Git's shit.

~~~
kinghajj
The definition of 'object' is outside of the scope of the documentation for
the 'push' command. Similarly with 'ref'.

From "man git":

"The object database contains objects of three main types: blobs, which hold
file data; trees, which point to blobs and other trees to build up directory
hierarchies; and commits, which each reference a single tree and some number
of parent commits.

    
    
           The commit, equivalent to what other systems call a "changeset" or "version", represents a
           step in the project's history, and each parent represents an immediately preceding step.
           Commits with more than one parent represent merges of independent lines of development.
    
           All objects are named by the SHA-1 hash of their contents, normally written as a string of
           40 hex digits. Such names are globally unique. The entire history leading up to a commit can
           be vouched for by signing just that commit. A fourth object type, the tag, is provided for
           this purpose.
    
           When first created, objects are stored in individual files, but for efficiency may later be
           compressed together into "pack files".
    
           Named pointers called refs mark interesting points in history. A ref may contain the SHA-1
           name of an object or the name of another ref. Refs with names beginning ref/head/ contain
           the SHA-1 name of the most recent commit (or "head") of a branch under development. SHA-1
           names of tags of interest are stored under ref/tags/. A special ref named HEAD contains the
           name of the currently checked-out branch."

~~~
tedks
You know what I literally never had to do when learning SVN, bazaar, or
mercurial? Learn a bunch of bullshit like "refs" or "objects" or "heads" or
whatever the fuck.

It is genuinely insulting to assume me to have the time or the patience to
read things like this. It's 2014. Interfaces _need_ to be better and I refuse
to use an interface that insults my time by attempting to make me learn a load
of bullshit.

~~~
bronson
And yet you have time to rant and steam here, which took more time than
reading what a "ref", "object", and "head" is.

Interesting priorities.

------
hardwaresofton
Awesome, this is going to make it much easier for lazy people (who are used to
git/like git more than other options) like me to contribute to emacs.

~~~
fletchowns
Every maintainers dream, lazy contributors!

~~~
josteink
To be fair, if you want contributors, removing every needless roadblock they
may encounter is certainly a worthwhile goal.

Using some archaic VCS which nobody has heard of, and which may or may not be
available on your platform of choice, certainly doesn't _help_ herd
contributors to your project.

------
Jacky800
The repo "git clone git.sv.gnu.org:/srv/git/emacs.git" is not yet active.

[https://lists.gnu.org/archive/html/emacs-
devel/2014-11/msg00...](https://lists.gnu.org/archive/html/emacs-
devel/2014-11/msg00604.html)

------
talles
I wonder if launchpad.net still bazaar only? Anyone knows?

~~~
Argorak
The front page says it in the very first paragraph:
[https://launchpad.net/](https://launchpad.net/)

bazaar is the provider for code hosting.

~~~
talles
Yes, but what about after you are _inside_ it?

Maybe they do offer other options but aren't really proud of it, at least not
enough to put it on the first page.

Anyway, I really think being bazaar-only it's a loss for launchpad. PPA's are
great, but most people I know don't want learn bazaar just for it.

~~~
icebraining
Bazaar is really simple to use, though. If you know Git or Mercurial, you can
learn it in 5 minutes, since the concepts map 1-to-1 and the commands are
sensibly named.

------
ForHackernews
I'm curious why he doesn't like git.

~~~
jessaustin
But he does. From last week:

 _But I got to thinking, early this morning, about the fact that I haven’t
been able to settle on just one VCS. I use git for most things, but there’s a
use case git doesn’t cover._

[http://esr.ibiblio.org/?p=6502](http://esr.ibiblio.org/?p=6502)

~~~
rtpg
Kind of weird because you can totally wrap git for this use case as well (not
like you need to commit all changes to your working set into one commit, and
pretty easy to filter per-file changes).

A fun-seeming exercise anyways, I guess it doesn't matter what tool you're
using underneath.

~~~
jessaustin
I thought his point was that these files don't have _any_ relationship to each
other, and that he would move them around on a regular basis. I can certainly
see why one wouldn't want such files to share a git repo.

