{"id":1264,"date":"2011-06-04T00:27:41","date_gmt":"2011-06-04T07:27:41","guid":{"rendered":"http:\/\/gregbaker.ca\/blog\/?p=1264"},"modified":"2011-06-04T00:27:41","modified_gmt":"2011-06-04T07:27:41","slug":"version-control-conundrum","status":"publish","type":"post","link":"http:\/\/gregbaker.ca\/blog\/2011\/06\/04\/version-control-conundrum\/","title":{"rendered":"Version Control conundrum"},"content":{"rendered":"<p>As most of you know, the School&#8217;s new <a href=\"https:\/\/courses.cs.sfu.ca\/\">course management system<\/a> is my baby.  It keeps track of many things, but what I care about right now is (1) who is in a course, and (2) what groups have been formed for assignments\/projects\/whatever.<\/p>\n<p>Given those things, I have had this idea: It would make perfectly good sense for each of those things (every student in a course; every group in a course) to have a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Revision_control\">version control repository<\/a> automatically created for them.  The instructor and TAs would also have access, but wouldn&#8217;t have to set anything up.  Students could use the repositories even in courses where the instructor doesn&#8217;t know what technology is.<\/p>\n<p>I have used Subversion repositories for the project groups in CMPT 470 for years.  The benefits from my point of view:<\/p>\n<ol>\n<li>Groups can collaborate in that way that version control systems allow.<\/li>\n<li>Students can work on code (even individually) in multiple locations and with versions kept.<\/li>\n<li>All of their code is safely backed-up on a server that we kind of trust.<\/li>\n<li>I can review what members of the group contributed what code.<\/li>\n<li>It&#8217;s a nice and easy way to submit code: just give me the SVN URL.<\/li>\n<\/ol>\n<p>When contemplating technologies to implement my scheme, I went first to <a href=\"http:\/\/git-scm.com\/\">GIT<\/a> (or possibly some other <a href=\"http:\/\/en.wikipedia.org\/wiki\/Distributed_revision_control_system\">distributed version control<\/a> system, since they&#8217;re all the rage).  GIT also has a pile of nice management tools like <a href=\"https:\/\/github.com\/sitaramc\/gitolite\">gitolite<\/a> that make creating thousands of repositories surprisingly easy.<\/p>\n<p>But while experimenting, I realized that GIT inherently trusted the user-provided information about who they are.  If I claim to be &#8220;Barack Obama &lt;president @whitehouse.gov&gt;&#8221; in my commits, then GIT lets me push those commits just fine, no matter who I have authenticated as at the central server. So, I pretty much lose benefit (4) in the worst cases (which are the cases I&#8217;m usually concerned with), which is pretty much a deal-breaker by itself.<\/p>\n<p>The &#8220;distributed&#8221; nature of any DVCS gets me this problem one way or another&mdash;anybody could push the whole group&#8217;s work since they could be working for weeks without touching the central server.  And having made that realization, I have to admit that (3) also disappears: they don&#8217;t have to push to the server very often, so a crash on their end could lose a lot of work.<\/p>\n<p>Finally, knowing students the way I do, (5) is gone too.  I&#8217;d give a lot to not have this conversation five times a semester: &#8220;I got a zero.&#8221; &#8220;You didn&#8217;t submit any code.&#8221; &#8220;Yes, I committed it.&#8221;  &#8220;You committed it, but did you push it to the server?&#8221; &#8220;Yes, I pushed it.&#8221;  &#8220;You typed the command &#8216;git push&#8217;?&#8221; &#8220;No, I use &#8216;git commit&#8217;. That puts the code on the server.&#8221; &#8220;No it doesn&#8217;t. You didn&#8217;t put any code on the server where I can get it.&#8221; &#8220;Yes I did&#8230; I committed it.&#8221;<\/p>\n<p>Also, it&#8217;s my understanding that it&#8217;s not possible to give a URL to a subtree of a GIT repository: the only URL is to the project itself.  That makes submitting with GIT much harder.<\/p>\n<p>So, I&#8217;m left with this: distributed version control is at least as good for developers, but it&#8217;s very bad for instructors.<\/p>\n<p>According to <a href=\"http:\/\/en.wikipedia.org\/wiki\/Comparison_of_revision_control_software\">Wikipedia&#8217;s comparison of revision control software<\/a>, the only open source, &#8220;actively-developed&#8221;, &#8220;client-server&#8221; VCS is Subversion.  So it looks like I&#8217;m back to the totally-uncool and old-fashioned SVN?<\/p>\n<p>Does anybody want to refute any of that?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As most of you know, the School&#8217;s new course management system is my baby. It keeps track of many things, but what I care about right now is (1) who is in a course, and (2) what groups have been formed for assignments\/projects\/whatever. Given those things, I have had this idea: It would make perfectly [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,10],"tags":[],"class_list":["post-1264","post","type-post","status-publish","format-standard","hentry","category-teaching","category-tech"],"_links":{"self":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/1264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=1264"}],"version-history":[{"count":10,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/1264\/revisions"}],"predecessor-version":[{"id":1274,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/1264\/revisions\/1274"}],"wp:attachment":[{"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=1264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=1264"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gregbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=1264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}