Fork me on GitHub

FISL10 day 1 0

FISL10 began, as usual, with lots of people from lots of places packing PUCRS’ event center in Porto Alegre. This is indeed a special edition! The official numbers are not yet computed; as I write the counter reached 7168 attendees… But since the database has been running locally yesterday on, people that registered at PUCRS are not yet counted… Registration team will merge the databases eventually, but that’s not their top priority right now.

So, this year I am not helping TVSL, which is being taken care of by Luis Felipe instead. He’s been doing a good work and there could be nobody else better than him. My quality of life increased dramatically by letting TVSL in Felipe’s hands… Maybe this year I manage to actually attend to some sessions, and to hang out with Debian guys.

This year I will partially take care of the Programming Arena. The challenge was revealed today and 11 “heroes” are, right now, trying to respond to it. It has been requested that they implement DNSCurve. They could have no better coach at this than D. J. Bernstein, who has been helping them both at the Arena and through the Arena private mailing-list.

Earlier, DJB also were in DNSCurve x DNSSEC panel, one of the most interesting technical sessions so far (bias warning: I was moderator for it). DJB and Frederico Neves (from NIC.br) exchanged arguments exposing interesting details of both secure DNS alternatives.

Also, today we got the confirmation from Brazilian Presidency that the President will attend our event. It will be on Friday, and I am too excited to hear what he has to say about free software government policies. (Apparently, apart from Linus, we managed to get everybody to show up in FISL ;) ).

I am also taking care of the Key Signing Party. This has been a rather good experience, since it requires almost nothing from me (except preparing the keylist and showing up at the scheduled time and place) :-).

See you tomorrow, at FISL!

Git basics: reversing the 'git sucks' effect 10

I’ve been using git this last few days and I am still working on a workflow for my projects. Unfortunately, as others have noticed, git violates POLS is so many ways, it ends up being hard to get.

Creating a remote repository seems to be the first thing to bite a developer switching to git (mainly if coming from a centralized SCM). I have not decided which is the best way of doing it, but I’ve been using git-daemon via inetd and a path in my remote hosting holding all my repositories for public pulling, and ssh for pushing. Here is how to create it:


local$ ssh spectra@remotehost
remotehost$ mkdir /var/git/myproject.git
remotehost$ cd /var/git/myproject.git
remotehost$ git --bare init 
remotehost$ logout
local$ cd myproject
local$ git remote add remotehost spectra@remotehost:/var/git/myproject.git
local$ git push remotehost master
...
otherlocal$ git clone git://remotelocal/myproject.git
otherlocal$ cd myproject
otherlocal$ git remote add remotehost spectra@remotehost:/var/git/myproject.git
(hack hack hack)
otherlocal$ git push remotehost master

Now everybody can pull your repository at git://remotehost/myproject.git and you can push and pull to it via ssh. Note that you have to setup git-daemon, which is pretty straight forward. I am using it as an inetd daemon, but you can use it as a standalone one. Debian has a package which does just that.

Now, some people think logging in a remote server just to create an empty repository is too much. Well… repositories are just .git directories. It happens that you can “push” for the first time by rsyncing your .git with a remote host:


local$ cd myproject
local$ rsync -a .git/ spectra@remotehost:/var/git/myproject.git
local$ git remote add remotehost spectra@remotehost:/var/git/myproject.git
(hack hack hack)
local$ git push remotehost master

(Apparently you can “push” using rsync every time, but it’s regarded as wiser to keep your – probably – crappy local repository commits separated from the public repository… otherwise commit messages like “Please, don’t use this code” are likely to pop up everywhere :) ). Now, I don’t know if this have side effects, but it works :-)

Another thing to notice is that git is more directed at pulling than pushing. This may be because of its designer: the way Linus works is by pulling changes from others’ repositories and not by letting others push’em into his one. And this is another violation of POLS for most of the people, who is used to “commit” their changes into some remote repository. Rather than that, people using git would expose their own repositories in order to have it pulled by others.

I also agree with most of the git critics wrt git commands… There’s a lot of examples – and I am not going deeper in this – but I think it was a bad choice calling “checkout” what git does when told to “checkout”, for instance. Yes, I know… different tools, different ways of seeing it… but everyone was already used to what centralized SCMs call their operations, and I think it would only help git adopting same names for the same operations, and inventing new ones for those proper of decentralized operations. Anyway, once you get it (and I have not completely got it yet), it seems all flow as expected. If this adaptation fails, there’s still Easy Git to the rescue!

One last thing that I think contribute to the “git sucks” effect: git-svn. This is a great tool, but it was built from git’s point of view… Given it’s intended as a glue for Subversion newcomers, it would benefit more from being built from svn’s point of view. This was mentioned by a colleague developer in my company, when he just couldn’t understand why one have to git svn rebase instead of a simple update. So git-svn also suffers of the “bad command naming habit” git do. Of course, that given that you came from this environment (I am sure git and git-svn makes perfect sense for Linus & cia :-) ). I have not tried yet, but yap seems to be targeted on providing an alternative to git-svn.