Ich unterrichte den dritten erforderlichen Einführungskurs in einer CS-Abteilung. Bei einer meiner Hausaufgaben werden die Schüler gebeten, den Code zu beschleunigen, den sie für eine frühere Aufgabe geschrieben haben. Faktor-Zehn-Beschleunigungen sind Routine; Faktoren von 100 oder 1000 sind keine Seltenheit. (Für einen Faktor von 1000 müssen Sie mit malloc () Anfängerfehler gemacht haben.)
Programme werden durch eine Sequenz kleiner Änderungen verbessert. Ich bitte die Schüler, jede Änderung und die daraus resultierende Verbesserung aufzuzeichnen und zu beschreiben.
Während Sie ein Programm verbessern, ist es auch möglich, es zu brechen. Wäre es nicht schön, zurückzutreten?
Sie können sehen, wohin ich damit gehe: Meine Schüler würden enorm von der Versionskontrolle profitieren. Es gibt jedoch einige Einschränkungen:
- Unsere Computerumgebung ist gesperrt. Alles, was von einem zentralen Repository abhängt, ist verdächtig.
- Unsere Schüler sind unglaublich überlastet. Nicht nur Unterricht, sondern auch Jobs, Sport, Musik. Damit sie ein neues Tool verwenden können, muss es unglaublich einfach sein und offensichtliche Vorteile haben.
- Unsere Schüler arbeiten meistens paarweise. Das Hin- und Herwechseln von Bits zwischen Konten ist problematisch. Könnte dieses Problem auch durch verteilte Versionskontrolle gelöst werden?
- Komplexität ist der Feind. Ich weiß, dass das Einrichten eines CVS-Repositorys zu verwirrend ist. Ich selbst habe immer noch Probleme, weil ich es nur einmal im Jahr mache. Mir wurde gesagt, SVN ist noch schwieriger.
Hier sind meine Kommentare zu bestehenden Systemen:
- Ich denke, eine zentrale Versionskontrolle (CVS oder SVN) ist ausgeschlossen, da unsere Schüler nicht über die erforderlichen Administratorrechte verfügen, um ein Repository zu erstellen, das sie mit einem anderen Schüler teilen können. (Wir haben keine Unix-Dateiberechtigungen.) Außerdem ist die Einrichtung unter CVS oder SVN zu schwierig.
- darcs ist sehr einfach einzurichten, aber es ist nicht offensichtlich, wie Sie Dinge teilen. darcs send (um Patches per E-Mail zu senden) scheint vielversprechend, aber es ist nicht klar, wie man es einrichtet.
- Die Einführungsdokumentation für Git ist nichts für Anfänger. Wie beim CVS-Setup habe ich selbst Probleme damit.
Ich bitte um Vorschläge, welche Quellcodeverwaltung für Anfänger verwendet werden soll. Ich vermute, wir können Ressourcen finden, um ein dünnes Furnier über ein vorhandenes System zu legen und die vorhandene Dokumentation zu vereinfachen. Wir haben wahrscheinlich keine Ressourcen, um neue Dokumentationen zu schreiben.
Also, was ist wirklich einfach zu Setup , verpflichten , revert , und teilen Änderungen mit einem Partner , aber muß nicht einfach sein , zu fusionieren oder zur Arbeit in großem Umfang?
Eine wichtige Einschränkung besteht darin, dass Programmierpaare in der Lage sein müssen, die Arbeit untereinander und nur untereinander zu teilen , und dass sich die Paare jede Woche ändern . Unsere Infrastruktur ist Linux, Solaris und Windows mit einem NetApp-Filer. Ich bezweifle, dass meine IT-Mitarbeiter für jedes Schülerpaar eine Unix-Gruppe erstellen möchten. Gibt es eine einfachere Lösung, die ich übersehen habe?
(Vielen Dank für die akzeptierte Antwort, die die anderen aufgrund ihres hervorragenden Verweises auf Git Magic sowie der hilfreichen Kommentare übertrifft.)
quelle
Antworten:
Ich würde sagen, etwas wie Git könnte in die Rechnung passen:
Schauen Sie sich diese Seite Git Magic oder sogar diese Tipp-Seite GitReady an
quelle
Zweitens die Wahl von Mercurial
Vorteile
Nachteile
quelle
Subversion ist einfach zu installieren, unter Windows, Linux und Mac OS X. Ich weiß nicht, in welchem Programm sie programmieren, aber das Subclipse-Plugin für Eclipse ist ziemlich einfach zu installieren und verbirgt einen Teil der Komplexität des Repositorys.
Und Repository-Komplexität? Das bedeutet einfach, dass in jedem Projekt ohnehin ein Trunk-, Tag- und Branch-Ordner vorhanden ist. Und sie haben vielleicht nicht viel Zeit, aber sie sollten die Zeit bekommen, SVN (oder ähnliches) zu lernen, weil es eine Fähigkeit ist, die in ihrem Lebenslauf gut aussieht.
quelle
Ich würde vorschlagen, sich Fossil anzuschauen - Es ist eine einzelne ausführbare Datei ohne Abhängigkeiten, die ausgeführt werden muss, der den gesamten Datenverkehr über HTTP betreibt, alle Repository-Daten in einer einzigen Datei speichert, die beliebig benannt werden kann, und ein versioniertes Wiki, Fehlerverfolgung und ein Web enthält -Server sofort einsatzbereit. Oh, und es ist vollständig verteilt.
quelle
Ich würde Mercurial empfehlen (auch 'hg' genannt). Es ist ein verteiltes Open-Source-VCS und benötigt kein zentrales Repository. Die tägliche Verwendung ist einfach. Es gibt genügend Dokumentation auf der offiziellen Website. Schauen Sie sich zum Beispiel QuickStart an .
Ausschlaggebend für mich war eine großartige GUI für Windows - TortoiseHg . Es scheint, dass es auch unter Linux unterstützt wird (habe mich nicht selbst ausprobiert). Und natürlich gibt es Befehlszeilenverteilungen für die meisten Linux-Versionen.
Natürlich scheint es von dieser Seite des Zauns aus einfach zu sein, vielleicht sind das Konzept, die Vorteile und der alltägliche Betrieb für vielbeschäftigte Studenten nicht so einfach, sich daran zu gewöhnen. Aber am Ende sind sofortige Festschreibungen, die Möglichkeit, zu jeder Revision zurückzukehren und von dort aus automatisch einen neuen Zweig zu erstellen, und intelligentes Diff / Merge einfach unersetzlich.
Hoffe das hilft!
quelle
Um Ihren Schülern die Bedienung zu erleichtern, können Sie einen SVN-Server mit aktiviertem Autocommit installieren, der über webdav freigegeben wird. Auf diese Weise können sie ihr Verzeichnis einfach mit WebDAV bereitstellen und werden jedes Mal automatisch festgeschrieben, wenn sie auf Speichern klicken. Mit TortoiseSVN, den Eclipse / Visual Studio-Plugins oder einer Webzugriffslösung wie ViewVC ist der Zugriff auf den Verlauf einfach. Für Ihre Anforderungen an Zugriffsbeschränkungen können Sie die integrierte Subversion-Authentifizierung verwenden (siehe hier ), die eine einfache Konfigurationsdatei für eine differenzierte Zugriffssteuerung verwendet.
Die Konfiguration ist viel einfacher geworden (und es gibt jetzt eine bessere Dokumentation - sehen Sie sich das SVN-Buch an ), könnte jedoch etwas kopiert werden, wenn Sie mehrere separate Repositorys mit Zugriffsbeschränkungen und einer Weboberfläche benötigen.
Autocommit ist eher eine Lösung für "meinen Büroangestellten / Chef", der keine Ahnung hat, was in einem Computer vor sich geht, und eine Versionskontrolle für Word-Dokumente benötigt. Studenten, die einen Programmierkurs belegen, sollten vielleicht auch lernen, wie man ein anständiges SCM benutzt.
Git und Mercurial wären wegen ihrer verteilten Natur nett, was das Teilen einfach macht - aber beiden Tools fehlen GUI-Schnittstellen, die wirklich einfach zu bedienen sind (TortoiseHg sieht vielversprechend aus, und gitk ist ein sehr guter Repository-Browser, aber Ihre Schüler müssten es trotzdem Wickeln Sie ihre Köpfe um die Befehlszeilenwerkzeuge, um die Werkzeuge voll auszunutzen. Auch das Konzept der verteilten SCMs ist etwas komplexer zu verstehen.
Auf der Pro-Seite könnten Sie öffentliche Hosting-Lösungen wie GitHub verwenden und müssten sich nicht um ein Server-Setup kümmern. Dies macht auch das Teilen von Lösungen wirklich einfach, würde aber Ihre Anforderung "nur miteinander" brechen. Aber ich denke, Sie werden sie sowieso nicht daran hindern können, Code auszutauschen. Aufgrund meiner Erfahrung mit Kursarbeiten habe ich festgestellt, dass das Betrachten des Codes und das Überprüfen, ob er eindeutig ist, der einzige Weg ist, das Kopieren zu verhindern.
Sie können auch PlasticSCM verwenden , das wirklich schöne Schnittstellen für viele IDEs und (zumindest die Website behauptet) kostenlose Lizenzen für Bildungseinrichtungen bietet.
quelle
Ich sehe keinen Grund, mich mit der Einrichtung des Versionsverwaltungssystems zu befassen. Überprüfen Sie die Bedingungen für die Verwendung von z. B. Google Code und tauchen Sie ein.
Ein CS-Kommilitone und ich haben es letztes Jahr benutzt und es funktioniert großartig und die einzige Voraussetzung ist eine Internetverbindung :-)
quelle
Bazaar , Mercurial und Git klingen für Ihren Fall geeignet - trivial, um Repositorys zu erstellen, und alle Schüler müssen nur den Lesezugriff auf das Dateisystem auf die Repositorys des jeweils anderen freigeben.
quelle
Darcs ist ein ausgezeichnetes DVCS, insbesondere für kleinere Projekte, beispielsweise für CS-Klassen. Ich wünschte, ich wäre im College mit Darcs oder Git bekannt geworden, und ich empfehle Ihnen auch, dass Sie es Ihren Schülern vorgestellt haben.
Ich benutze Git täglich. Es ist ein sehr robustes DVCS, aber für kleinere Projekte vielleicht ein bisschen übertrieben.
Treffen Sie Ihre Wahl, eines dieser Versionskontrollsysteme ist wirklich gut.
quelle
darcs send
Das Einrichten ist trivial. Wenn Sie es ausführendarcs send <remote repo>
, wird im_darcs/prefs/email
Remote-Repo nachgeschlagen, wohin die E-Mail gesendet werden soll. Wenn dort nichts vorhanden ist, wird der Benutzer stattdessen dazu aufgefordert.Der Empfänger des Patches speichert nur die Datei und läuft
darcs apply <patch file>
im entsprechenden Repo.So kann jeder Schüler einfach seine eigenen Repos mit seiner eigenen E-Mail-Adresse haben
_darcs/prefs/email
und Patches per E-Mail austauschen.quelle
darcs
einfach einzurichten ist, aber da ich ein Opfer von darcs FAIL war und buchstäblich Wochen der Arbeit verlor, würde ich es niemals einem Studenten zufügen.Ich habe einige sehr gute Erfahrungen mit Bazaar gemacht . Wie Git / Mercurial wird es verteilt. Es ist serverlos - Sie müssen keinen Daemon auf dem Server installieren, auf dem sich das Repository befindet, selbst wenn Sie remote darauf zugreifen (dh es kann nur als FTP / SFTP-Freigabe funktionieren).
Ein verteiltes VCS ist am flexibelsten. Sie können einen Zweig aus einem traditionelleren "zentralen" Repository auschecken und den Vorteil nutzen, dass Sie Ihre eigene kleine Entwicklung getrennt vom zentralen Server usw. abspalten und dann möglicherweise Ihre Änderungen wieder nach oben verschieben können.
Es gibt Import-Tools für andere VCSs wie Subversion, obwohl ich sie nicht ausprobiert habe.
quelle
In Bezug auf Berechtigungen würde ein externer Service keine Zeit von den IT-Mitarbeitern Ihrer Universität benötigen.
Zum Beispiel erlaubt Bitbucket (mit Mercurial) jetzt unbegrenzte private Repos mit bis zu 5 Benutzern. Ich vermute, jedes neue wöchentliche Schülerpaar arbeitet gemeinsam an einem neuen Projekt, was bedeutet, dass sie einfach das Repository initialisieren, den anderen Benutzer hinzufügen und loslegen können.
Wenn sie nicht jede Woche an einem neuen Projekt arbeiten, müssten Berechtigungen entfernt und hinzugefügt werden, und ich würde sie ermutigen, mehrere Repos (eines pro Konto) auf Bitbucket zu haben, damit jeder Schüler weiterhin Zugriff hat. (Dies wäre sowieso eine gute Idee, aber für nur einwöchige Projekte ist es möglicherweise einfacher, wenn nur ein Studentenkonto das Repo besitzt und das andere mit Erlaubnis.)
In Bezug auf welches VCS ist Mercurial meiner Meinung nach am besten für Ihre Plattformen geeignet. TortoiseHg eignet sich besonders gut für neue Benutzer, wenn sie mit Befehlszeilenschnittstellen nicht vertraut sind (und Sie keine Zeit zum Erlernen haben).
Speziell für Ihre Situation ist der Vorteil von DVCS, dass die Kopie auf dem Universitätsserver (falls vorhanden) ein vollwertiges Repo ist. Möglicherweise ist es für Sie oder TAs bequem, Zugriff zu haben. Dies sollte einfacher einzurichten sein und das ganze Semester dauern, anstatt wöchentlich zu wechseln.
quelle
Das Einrichten eines Subversion-Repositorys ist trivial. Ich habe häufig eine einmalige Einrichtung für kleine Projekte eingerichtet (z. B. die Entwicklung von Code für eine Antwort auf Stack Overflow!), Und ich bezweifle, dass jemand anderes, der überhaupt ein SCM-System erlernen könnte, Probleme damit haben würde.
Das Teilen ist jedoch sicherlich ein Problem. Wenn die Schüler immer zusammenarbeiten, wenn sie gleichzeitig arbeiten, können sie ein USB-Laufwerk verwenden, da sie es einfach ausstecken und hin und her weitergeben können, wenn sie sich verpflichten müssen, und die Person, die später alleine programmieren wird, kann einfach daran festhalten es. Das ist jedoch nicht ganz bequem.
Eine andere Option, da alle auf einem gemeinsam genutzten Unix-System zu arbeiten scheinen, besteht darin, ein Verzeichnis mit dem für den Rest der Gruppe (oder alle Benutzer) gesetzten Bit "Ausführen, aber nicht Lesen" zu erstellen und einen s3cr3t-Namen für das Repo darunter zu verwenden , eine, die nur die beiden Schüler kennen. Wenn er diesen geheimen Namen an den Professor weitergibt, kann er auch jederzeit die Repos der Schüler untersuchen. ("Sie haben die Aufgabe also pünktlich eingereicht, aber das E-Mail-System hat sie verloren? Lassen Sie mich nur den Zeitpunkt dieses Commits betrachten ...") Ein Skript könnte dabei helfen, dies einzurichten.
Je mehr ich darüber nachdenke, desto mehr mag ich es. In gewisser Weise ist es einfacher als die Git-Lösung, da der Schüler sich nicht mit dem Weitergeben von Patches befassen muss (oder dies vergessen muss) und der Schüler gezwungen sein wird, sich mit Zusammenführungen zu befassen, bevor er sich verpflichtet, und nicht, sobald die Dinge erledigt sind das Repository (mit der anschließenden Möglichkeit, die Bearbeitung auf unbestimmte Zeit zu verzögern).
quelle
UPDATE: Sechs Jahre später würde ich nie wieder in Betracht ziehen, Subversion für irgendetwas zu verwenden. Git ist der richtige Weg. Obwohl ich SVN immer noch für etwas "einfacher" halte, lohnt es sich nicht einmal mehr, es zu unterrichten.
Ich habe CVS, SVN, Bazaar und Git (in dieser Reihenfolge der Einführung) verwendet und ich muss den Studenten sagen, dass SVN der richtige Weg ist. Während ich leitender TA war, haben wir SVN als Ersatz für das alte "Submit-Skript" implementiert, bei dem es sich um ein Tar- und E-Mail-Skript handelte. Labstaff richtete ein Apache SVN-DAV-basiertes Repository ein und unter Verwendung der Authz-Datei konnten die TAs und der Kursleiter die Berechtigungen für Verzeichnisse pro Schüler und Gruppenprojekte auf einer sehr fein abgestimmten Ebene steuern, sodass die Schüler einen sehr einfachen Weg zu ihrem ersten Commit hatten. Siehe mein Tutorial (Anmeldeinformationen wurden von den neuesten TAs herausgerissen .. hmm ..)
In Bezug auf die Verwendung von Subversion ohne Intervention durch Systemadministratoren habe ich dies auch in einem Gruppenprojekt getan, in dem keines meiner Gruppenmitglieder jemals zuvor Subversion verwendet hatte und die meisten von ihnen nur sehr wenig Verwirrung stifteten (alle bis auf einen). . Ich habe auch ein Tutorial zum Einrichten eines solchen sicheren gemeinsam genutzten Repositorys mit nur grundlegendem SSH-Zugriff hier geschrieben .
Ich bin definitiv anderer Meinung, dass Git das beste VCS für Anfänger ist, die die leeren Blicke bei der Erwähnung eines VCS-Systems genug erlebt haben, geschweige denn der von Linus selbst geschriebene Mac-Daddy-VCS-König Git. Es ist einfach nicht wahr, dass git nicht komplexer als svn ist, und das Fehlen ausgereifter n00b- Tools allein ist Grund genug, es in diesem Szenario nicht zu verwenden. Ich habe gerade angefangen, git für ein neues Projekt zu verwenden, das ich in Netbeans entwickle, und bin bereits mit der Netbeans-Integration auf ernsthafte Einschränkungen gestoßen. In einem einzigen Semester werden Sie keine Funktionen verwenden, die svn nicht bietet, also ist git übertrieben.
quelle
Subversion unter Windows kann so einfach sein wie das Einrichten von TortoiseSVN. Es gibt eine gewisse Lernkurve für die Verwendung (insbesondere, wenn Sie noch nie zuvor eine Versionskontrolle verwendet haben), aber Sie können dies unterstützen, indem Sie eine halbe Lektion darauf verwenden und einige PowerPoint-Folien zum Herunterladen bereitstellen.
Was die Zentralisierung betrifft - ich habe von Websites gehört, die kostenloses SVN-Projekthosting anbieten. Eine schnelle Google-Suche hat diese Seite aufgedeckt, aber es gibt sicherlich noch mehr.
quelle
Wenn Sie nach etwas suchen, das wirklich wirklich einzurichten ist, warum dann nicht die kostenlose SVN-Hosting-Option wählen, müssen Sie nichts einrichten!
Leider haben die beiden älteren, von denen jeder darauf hingewiesen hätte, dass sie Assembla, Unfuddle sind, die Unterstützung für ihr kostenloses Hosting eingestellt (oder zumindest, wenn Sie möchten, dass sie privat sind), aber Sie können Origo weiterhin verwenden, um sowohl offenes als auch geschlossenes Hosting zu erhalten .
Dies hat den Vorteil, dass Sie alle Projekte besitzen und verfolgen können und die Personen, die Zugriff haben, problemlos steuern können. Sie müssen sich keine Gedanken über das Recht zum Erstellen von Repos machen.
Wenn Sie diesen Weg gehen und die Komplexität beseitigen möchten, müssen Sie eine GUI-SVN-Anwendung verwenden, um das Lernen nahezu trivial zu machen (da ich bezweifle, dass viel Zusammenführung stattfinden wird). Ich würde tortoisesvn empfehlen , schlüpft direkt in Ihr Windows Explorer-Kontextmenü.
quelle
Ich würde sagen, dass Sie am besten versuchen, mit Ihrer IT-Abteilung zusammenzuarbeiten, um ein System / eine Methode für Ihre Schüler einzurichten, mit der Sie problemlos neue SVN / CVS-Repositorys erstellen können.
Wahrscheinlich könnten Sie die IT-Abteilung dazu bringen, Ihnen die erforderlichen Berechtigungen zum Erstellen von Repositorys für Ihre Schüler zu erteilen, auch wenn diese die Berechtigungen nicht den Schülern selbst geben. Sie könnten wahrscheinlich ziemlich leicht ein paar Skripte schreiben, um Repositories aus Listen von Studenten zu Beginn des Semesters in Massen zu erstellen.
quelle
RCS für Linux.
Ich habe nichts Einfacheres als RCS für Witwen gefunden, aber nicht alle RCS-Ports funktionieren gut, daher müssen Sie sie ausprobieren, was es nicht einfach macht. Windows ist für Entwickler einfach nicht einfach. Der Windows-Port von http://www.cs.purdue.edu/homes/trinkle/RCS/ ist ziemlich gut.
quelle