Perl Migrates To the Git Version Control System
On Elpeleg writes "The Perl Foundation has announced they are switching their version control systems to git. According to the announcement, Perl 5 migration to git would allow the language development team to take advantage of git's extensive offline and distributed version support. Git is open source and readily available to all Perl developers. Among other advantages, the announcement notes that git simplifies commits, producing fewer administrative overheads for integrating contributions. Git's change analysis tools are also singled out for praise. The transformation from Perforce to git apparently took over a year. Sam Vilain of Catalyst IT 'spent more than a year building custom tools to transform 21 years of Perl history into the first ever unified repository of every single change to Perl.' The git repository incorporates historic snapshot releases and patch sets, which is frankly both cool and historically pleasing. Some of the patch sets were apparently recovered from old hard drives, notching up the geek satisfaction factor even more. Developers can download a copy of the current Perl 5 repository directly from the perl.org site, where the source is hosted."
but this is fantastic. I use perl every day and love it.
They should have moved to Subversion. Git is just plain weird.
This must be the sign. Any day now The Announcement will come: "Perl Six is Ready!".
And there will be much rejoicing!
Seriously, I can't wait!
I can understand the advantage of using distributed version control. But given all the Haskell people involved (who came in via Pugs) I'm surprised they went with Git vs. Darcs.
Does anyone know if speed is as large of an issue as it is for Linux kernel or was there another reason?
Some perl users use emacs, others use vi.
Slow news day, eh?
I mean, really. Git's good -- git's even really good -- but what does it matter if Perl 6.x is gonna take longer than Duke Nukem Forever to come out? It's the clear and obvious winner of the OSS vaporware award. [And, yeah, I'm aware that there are beta releases -- or, at least, pre-releases -- but "where's the beef" already?] I'm not a big fan of ESR, but I have to admit "release early and release often" is something I happen to agree with.
$.02
$ git clone git://perl5.git.perl.org/perl.git
-bash: git: command not found
There's more insight in a lolcat picture than there is in this comment.
Fixed the subject line for you.
Last year, I completed two important Perl-based projects for my employer. I also use Perl at least once a week to run analyses of my Web server logs. I prototype Web applications in Perl and often just put the prototype into production because it works well. I'm still using Perl that I wrote over 10 years ago, with NO changes, on several OSs. And I use Ubuntu Debian, of which Perl is an integral component.
Perl is great. If I want what it doesn't have, I use a different language. But when I want regular expressions, CPAN, quick and secure CGI, analysis of large data sets and general parsing, easy database integration, and efficient portability from server all the way down to embedded systems, Perl is the first language I consider. Ruby might be ready for the real world one day. And Python is good for other things, but it is not a replacement for Perl.
Rich And Stupid is not so bad as Working For Rich And Stupid.
I propose using Git for CPAN too.
Can be cool - if you want to make changes to a module that is not yours, you should be able to branch it, make the modification, and offer the branch to the original author.
and it can be better - operate against your personal branch of CPAN.
Ars:
The git repository incorporates historic snapshot releases and patch sets, which is frankly both cool and historically pleasing. Some of the patch sets were apparently recovered from old hard drives, notching up the geek satisfaction factor even more.
look familiar?
A checked out git tree of Perl using git-clone is 151MB. If you run git-gc --aggressive, it increases to 225MB.
Has anyone seen this behavior before? All of the projects that I track either decrease in size or remain the same. I've never seen one jump up in size after telling the GC to run.
I'm using git 1.5.6.5.
These distributed models work best if it's a large team, which potentially has more than one level of hierarchical structure.
You do typically have a canonical central repository managed by the project lead (in the Linux kernel's case, Linus's tree). But then sub-section leads might have their own canonical repository for that sub-section, and merge in their team members' changes into a stable state that they approve of before asking for those changes to get merged into the central branch. Or they might bundle up some particularly important set of changes for early merging "upstream", making sure they cleanly apply against the current central repo. That's all a nightmare to manage in SVN, which conceives of branches as something you do occasionally and keep around for a while, not as a hierarchical project-management tool.
On the other hand, if you have a relatively small or flat team, or one where the sub-sections break down really cleanly so each one can have its own central repo, it might not buy you much. I'm working on a small project with 4 people at the moment, and SVN is perfectly fine, and I can't really imagine what I'd do with a distributed version control system (I'd just use it like a centralized one, pushing everything to the one repo everyone pulls from).
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
My first response was "Do they still develop Perl?"
When I first started with Perl 3.0 many, many years ago, I fell in love with the language. It was flexible, powerful, and could do all sorts of amazing things. Version 5.0 brought in objects, but the way they worked was a little kinked. Defining classes in Perl is not easy, and I always have to go back to the manpage to make sure I've got all the incantations. Many times, I simply use object oriented structures and forgo the object definitions.
Perl 6 was suppose to fix everything. It would improve the way class definitions worked. Perl 6 would be a better object oriented language while still allowing you to hack out quick scripts like you would in shell script.
Well, Perl 6 was announced almost a decade ago, and it still isn't released. Meanwhile, Python has become the defacto scripting language for the OSS world. Even I, a Perl fanatic whom makes most Mac fanatics look mellow have to admit that, and learn Python. I hate Python. It's use of indents for flow control is a throwback to Fortran. Its lack of regular expressions in the string object (you have to import a special "re" object) makes it maddening. Why o' why does Python use "pop" for arrays, but not "push"? What were the designers on when they decided "exists" is not a member function of hashes -- excuse me -- dictionaries and arrays? Why this syntactic distortion of over 50 years of computer programming overturned?
But, I am now a good Python developer writing all of my stuff in Python. I am use to the cryptic error messages that don't really explain the problem (after all, Python has only been around for a bit over a decade). I am use to the fact that basic structures of the language change from implementation to implementation. I even like the fact that "numbers" are divided into multiple types although you really can't declare a number to be a specific type. It does allow you to experience the fun of your division suddenly not working because it is INTEGER division. (And, of course, Python 3.0 will change this very basic part of implementation and break everyone's Python script!)
Perl could have been the language of the web. After all, even Perl has fewer syntactic quirks than PHP, but it is PHP that is the glue behind server side webpages. While the Perl gurus were redesigning Perl, PHP got incorporated into an Apache module and added the syntactic sugar needed to run sessions and keep variables between PHP scripts.
So, Perl, the glue that use to keep the Internet flowing has become a niche language. Almost all of the younger developers I know never bother to learn it, and fewer and fewer jobs are interested in it. It is Python that everyone wants. It is PHP that runs the message boards and CMS pages. Perl is simply no longer in the picture.
Every few years, something I've learned becomes obsolete. It's the field. One time, I knew how to setup a UUCP network. One time, I could setup a Gopher site. I also learned all the quirks of HTML 3.2 and had to lose that to learn CSS. I use to know C shell programming, and of course I was a C developer and an expert in the curses library. I've usually gave up these technologies without too many problems.
Perl is different. I've been a Perl developer for over a decade. I've always loved the language, and I've solved many, many issues with it. One place where I worked was a .NET development shop when they suddenly realized that some major component of their software couldn't retrieve the information from the network. It would take weeks to fix! I wrote a Perl script in four hours that took care of the problem.
Another place I worked had damage in a customer's database. They had everyone in the company searching for problems and re-inputing the information by hand into a clean database. A Perl script I wrote in a couple of hours did the job. Perl made me the expert. I was the wunderkind. Perl allowed me to do the impossible. It was quick, hackish, yet could also be used to build powerful programs
Linus Torvalds, the creator of Linux, gets dissatisfied with the version control situation and so all by himself he simply sits down and cranks out a new one that has enough advantages to displace the prevailing standards? Is that really right?
So an even bigger project (at least in term of code size) will switch from SVN to git in the near future.
A survey was run among Gnome contributors and Git won the most support in almost all categories:
http://blogs.gnome.org/newren/2009/01/03/gnome-dvcs-survey-results/
@neonux
And what silly git came up with this idea in the first place?
svn has one repository, and it's always central. In git, you have any number of repositories, and whether you call one "central" is an administrative question, not a technical one.
It solves the problem of "I don't want to check this into svn yet, but I want to save a checkpoint"; developers can have local repositories for coding, and you'll have one (or more) for integration and release. You can cherry-pick changes, merging any individual change at any time (or never).
And it's ridiculously fast. I never thought svn was that slow, but turns out it's dog-slow. If you remember being floored by the Amiga's blitter graphics: that sort of fast.
They always had to be different, don't they... (chuckle) ------- "You know everybody is ignorant, only on different subjects."
Didn't anybody read the summary before it was posted? It should read "The Perl Foundation has announced they have switched their version control systems to git."
So, hmmm, is there a TortoiseGit project for us lazy Windows users ? Which reminds me, is there a GUI for linux equivalent to TortoiseSVN ?
Non-Linux Penguins ?
There are too few developers working on Perl 6, adding a few would actually speed it up. There is a lot of work to be done, and people are spread too thin.
I don't have a clue regarding perl, but looking at some perl scripts, I think I can do it. I mean all you have to do is type #! /bin/perl and roll your face over the keyboard.
You guys know that, In the UK at least, git is a moderate insult with the same meaning as bastard? Why, just earlier today a friend of mine referred to me as a "Jammy Git".
At least it will make any future lectures on Perl I attend more interesting.
While the Perl for Linux camp enthusiasts are probably dribbling with uncontrolled glee about now being able to fiddle with git when fiddling with Perl... what about the Perl for Win32 camp? According to Wikipedia about git on Win32: msysgit: "While somewhat slower than the Linux version, it is acceptably fast and is reported to be usable in production, with only minor awkwardness. In particular, some commands are not yet available from the GUIs, and must be invoked from the command line." CYGWIN git: "Regardless, many people find a Cygwin installation too large and invasive for typical Windows use." At least with Perforce it was equally easy to get Perforce up and running on Linux or Win32 boxes. Typically you'd just have to copy one executable "p4" or if you prefer the GUI then additionally "p4v". I can't help feeling that switching to "currently-Win32-neglected" git could possibly harm one of Perl's most attractive qualities; that many modules work cross platform. Surely it would be more prudent for the Perl maintainers to wait until Win32 git is more mature etc?
You guys know that, In the UK at least, git is a moderate insult with the same meaning as bastard?
Linus likes to name his projects after himself. Hence, "Linux" and "git" - the British slang meaning of the term being the one implied. I like the Oxford definition; "an arrogant or contemptible person". "bastard" has another meaning, though its slang use approximates the same :-).
At one point about two years ago, I was parsing a lot of web log files, so I whipped up a perl script to do it. It was taking forever to run, and a coworker suggested that I rewrite the parser in Java. I looked at him like he was from Mars, but I also had nothing better to do while perl was chugging away, so I rewrote the parser.
I rewrote the perl code basically line for line (i.e. no optimizations) in Java using Java's built in regular expression parser, and the thing ran about 100x as fast.
That was the last line of perl I have ever written, and probably ever will write.
They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
Well done Sam -- you've been working on this for quite some time. In addition, big props for Catalyst IT, Wellington, and open source!
Two copies of every file are managed by a SVN checkout - the base file and the working file. If the filesystem could store these together then the cost would be halved I understand that btrfs will support a copy-on-write version of cp, which should allow this.
Defining classes in Perl is not easy, and I always have to go back to the manpage to make sure I've got all the incantations. Many times, I simply use object oriented structures and forgo the object definitions.
Why o' why does Python use "pop" for arrays, but not "push"? What were the designers on when they decided "exists" is not a member function of hashes -- excuse me -- dictionaries and arrays? Why this syntactic distortion of over 50 years of computer programming overturned?
I never liked Perl or Python, but graduated from sh to awk to Pike. It's not for everyone, but for people used to C syntax, it's a script language from heaven.
Honest question: how does git compare to Clearcase? I ask because we used Clearcase at my previous job. I have fairly vivid memories of cursing it at the time. I started using svn for small projects at home and thought it was the best thing ever. In my current job we use svn as well; it's a small team, and the majority of modules have explicit ownership by a single person.
Anyway, I watched that video of Linus talking about git, and reading many of the posts here, I think it sounds really cool. But if my memory is correct, it seems like Clearcase can do many of the same things. The problem I saw with Clearcase, though, was more of a policy program. There was a tremendous amount of code history from people who had no business using any revision control system in the first place. Then there were histories of different peoples' ideologies on how source should be managed. Finally, while I was there, we had a guy come into our group who, in my opinion, had a really sane approach to Clearcase usage. Basically, the best practices he preached made our Clearcase usage look a lot like the good parts of git that everyone talks about. But still, to have sanity in Clearcase, it required that everyone follow the best practices, i.e. a policy matter. Too many people either didn't understand the rational behind the policy, were too stubborn to do it any way but their own, or simply made too many mistakes trying to keep up with the rules of the best practices.
Also, CC was dreadfully slow---everyone talks about how git is faster than svn, and svn is definitely faster than Clearcase (in my experience anyway).
Another area where we struggled was integrating the offshore development team into our Clearcase environment. I am guessing that git is fairly open by design---how does it fare for distributed groups for proprietary development (i.e. where the code needs to be kept secret)? CC may have improved, but when I was there, the offshore team had to use this Clearcase Web program that had limited functionality that couldn't even do everything we needed to maintain said sane policies mentioned above. I remember the offshore team checking code in, then I would go through and re-work the revision history to make it adhere to our policy. (This is about the time I left for a new job.)
Anyway, I'm not trying to promote Clearcase in anyway---I just wonder how it differs from git. And, even if it is fundamentally different, it looks like CC can somewhat be hammered into acting like git in some (perhaps scary) way.
Final question: the git method (as I understand it) certainly makes a lot of sense. But what about for developers who "don't get it"? It seems like it would be easy in such a de-centralized system to bung things up pretty bad for everyone else. I.e., how is sane usage policy enforced?
This is really about money. I've used Perforce and CVS and we actually ended up preferring CVS (despite many feature losses) because of the fact that proprietary licenses were just not worth the feature set, and as the project matured we developed enough scripts to compensate for the lack of features. So over time, a pay-for-Version Control system just doesn't seem worth it. --Ray
http://www.beanleafpress.com
I run Mercurial and Git for different projects. Mercurial is for the majority of projects though. Its like Git, except it is written in python instead of C, it doesn't suck on Windows machines, its faster and more efficient, and its easier to work with. I get the feeling that a lot of people move to Git simply because Linus came up with it, and they completely ignore comparison against a real competitor like Mercurial.