私は、CS部門で3番目に必要な入門コースを教えています。私の宿題の1つは、生徒に以前の課題用に作成したコードを高速化するように依頼します。 10倍の高速化は日常的なことです。 100または1000の係数は前代未聞ではありません。 (1000倍のスピードアップのためには、malloc()で新人のミスをしている必要があります。)
プログラムは、小さな変更であるシーケンスによって改善されます。私は学生に、各変更とその結果の改善を記録して説明するように依頼します。
プログラムを改善している間、それを壊すことも可能です。バックアウトするのはいいことではないでしょうか?
私がこれで何をしているのかがわかります。私の生徒たちはバージョン管理から多大な恩恵を受けるでしょう。ただし、いくつかの注意事項があります。
これが既存のシステムに関する私のコメントです。
初心者の学生にどのソース管理を使用するかについての提案を募集しています。既存のシステムの上に薄いベニアを置き、既存のドキュメントを簡略化するためのリソースを見つけることができると思います。新しいドキュメントを作成するためのリソースがない可能性があります。
setup、commit、revert、および変更をパートナーと共有しますがマージまたは簡単にする必要はありません大規模に働くには?
重要な制約は、プログラミングペアが互いに作業を共有でき、相互にのみ共有できる必要があるということです、およびペアは毎週変更されます。私たちのインフラストラクチャは、netappファイラーを備えたLinux、Solaris、およびWindowsです。 ITスタッフが、学生のペアごとにUnixグループを作成したいとは思いません。私が見落とした簡単な解決策はありますか?
(受け入れられた回答に感謝します-これは Git Magic への優れた参照と役立つコメントのために他の人を打ち負かしています。)
次に、 Mercurial の選択
メリット
短所
Subversionは、Windows、Linux、Mac OS Xに簡単にインストールできます。彼らがプログラミングしているプログラムはわかりませんが、Eclipseのサブクリッププラグインはインストールがかなり簡単で、リポジトリの複雑さの一部を隠しています。
そして、リポジトリの複雑さ?とにかく、各プロジェクト内にトランク、タグ、ブランチフォルダーがあるだけです。また、時間はあまりないかもしれませんが、CVで見栄えがするスキルなので、SVN(または同様のもの)を学ぶ時間を確保する必要があります。
Fossil -実行する依存関係のない単一の実行可能ファイルであり、すべてのトラフィックをHTTP経由で操作し、すべてのリポジトリデータを任意の名前の単一ファイルに保持し、バージョン管理を含めます。 wiki、バグ追跡、およびWebサーバーをそのまま使用できます。ああ、それは完全に配布されています。
私は Mercurial (「hg」とも呼ばれます)をお勧めします。これは分散型のオープンソースVCSであり、中央リポジトリは必要ありません。毎日の使用は簡単です。公式サイトには十分なドキュメントがあります。たとえば、 QuickStart を確認してください。
私にとって決定的な点は、Windowsの優れたGUIでした- TortoiseHg 。 Linuxでもサポートされているようです(自分で試したわけではありません)。そしてもちろん、ほとんどのLinuxバージョン用のコマンドラインディストリビューションがあります。
もちろん、フェンスのこちら側からは簡単に思えますが、多忙な学生のコンセプト、利点、そして日常の操作は、慣れにくいでしょう。しかし、結局のところ、即時コミット、任意のリビジョンに戻してそこから新しいブランチを自動的に作成する機能、そしてインテリジェントな差分/マージは、かけがえのないものです。
お役に立てれば!
学生が本当に使いやすいように、自動コミットをオンにしてSVNサーバーをインストールし、webdavを使用して共有することができます。この方法では、WebDAVを使用してディレクトリをマウントするだけで、保存を押すたびに自動コミットされます。TortoiseSVN、Eclipse/Visual Studioプラグイン、またはViewVCなどのWebアクセスソリューションを使用すると、履歴に簡単にアクセスできます。アクセス制限が必要な場合は、統合されたSubversion認証を使用できます(- こちら を参照)。これは、細かいアクセス制御のための単純な構成ファイルを使用します。
設定は非常に簡単になりました(そして、より良いドキュメントがあります- SVN Book を見てください)が、アクセス制限とWebインターフェースを備えた複数の個別のリポジトリが必要な場合、少し複雑になる可能性があります。
Autocommitは、コンピューター内で起こっていることがWordドキュメントのバージョン管理を必要とする手掛かりがない「私の会社員/上司」のためのソリューションです。プログラミングコースを受講している学生は、まともなSCMを使用する方法も学ぶ必要があります。
GitとMercurialは、分散された性質により共有が容易になるのでいいですが、どちらのツールにも本当に使いやすいGUIインターフェースがありません(TortoiseHgは有望に見え、gitkは非常に優れたリポジトリブラウザーですが、学生はまだコマンドラインツールに頭を抱え、ツールを最大限に活用します。また、分散SCMの概念は、理解するのが少し複雑です。
プロ側では GitHub のようなパブリックホスティングソリューションを使用でき、サーバーのセットアップについて心配する必要はありません。これにより、ソリューションの共有も非常に簡単になりますが、「相互にのみ」という要件が満たされなくなります。とにかく、あなたが彼らがコードを交換するのを止めることはできないだろうと思います。コースワークでの私の経験では、コードを見て、それがユニークであることを確認することが、コピーを防ぐ唯一の方法であることを発見しました。
PlasticSCM を使用することもできます。これは、多くのIDEに対応するすてきなインターフェイスと、教育機関向けの(少なくともサイトの主張による)無料のライセンスを備えています。
ソース管理システムのセットアップに対処する理由はないと思います。使用条件を確認します。 google code と飛び込みます。
仲間のCS学生と私は昨年それを使用しましたが、それはうまく機能し、唯一の前提条件はインターネット接続です:-)
Darcsは優れたDVCSであり、特にCSクラスのプロジェクトなどの小規模なプロジェクトに適しています。私が大学でDarcsまたはGitを紹介されたことを願っています。また、学生に紹介したことを賞賛します。
私はGitを日常的に使用しています。非常に堅牢なDVCSですが、小規模なプロジェクトには少々やり過ぎです。
どちらを選ぶか、これらのバージョン管理システムのどちらも本当に良いです。
darcs send
の設定は簡単です。darcs send <remote repo>
を実行すると、リモートリポジトリの_darcs/prefs/email
を調べて、メールの送信先を決定します。そこに何もない場合は、代わりにユーザーにプロンプトを表示します。
パッチの受信者はファイルを保存し、適切なリポジトリでdarcs apply <patch file>
を実行するだけです。
したがって、各学生は_darcs/prefs/email
にある自分のメールアドレスを使用して独自のリポジトリを作成し、パッチをメールで交換できます。
私はBazaarで非常に良い経験をしました。 Git/Mercurialと同様に配布されます。これはサーバーレスです。リモートでアクセスしている場合でも、リポジトリをホストしているサーバーにデーモンをインストールする必要はありません(つまり、FTP/SFTP共有として機能します)。
分散型VCSは最も柔軟性があります。より伝統的な「中央」リポジトリからブランチをチェックアウトして、中央サーバーとは別の独自の小さな開発を分岐させることができるというすべての利点を得て、おそらく変更を元に戻すことができます。
私はまだ試していませんが、Subversionなどの他のVCS用のインポートツールがあります。
権限に関しては、外部のサービスはあなたの大学のITスタッフの時間を必要としません。
たとえば、 Bitbucket (Mercurialを使用)では、最大5人のユーザーで無制限のプライベートリポジトリが許可されるようになりました。毎週新しい生徒のペアがそれぞれ新しいプロジェクトに取り組んでいると思います。つまり、リポジトリを初期化し、他のユーザーを追加するだけでよいのです。
毎週新しいプロジェクトに取り組んでいない場合は、権限を削除して追加する必要があります。各生徒が引き続きアクセスできるように、Bitbucketに複数のリポジトリ(アカウントごとに1つ)を用意することをお勧めします。 (これはとにかくいいアイデアですが、1週間のプロジェクトの場合のみ、1つの学生アカウントにリポジトリを所有させ、もう1つのアカウントに許可を与えておくほうが簡単な場合があります。)
どのVCSについては、Mercurialがあなたのプラットフォームに最も適していると思います。TortoiseHgは、新しいユーザーがコマンドラインインターフェイスに慣れていない(そして学ぶ時間がない)場合、特に探索するのに適しています。
状況に応じて、DVCSの利点は、大学サーバー(存在する場合)上のコピーが本格的なリポジトリであることです。あなたやTAがアクセスできると便利です。これは設定が簡単で、毎週変更するのではなく、すべての学期が続くでしょう。
Subversionリポジトリの設定は簡単です。私は、小規模なプロジェクト(Stack Overflowで回答するためのコードを開発するなど)の1回限りのものとして頻繁にセットアップし、SCMシステムを学ぶことができる他の人が問題を抱えることはないと思います。
$ svnadmin create /home/cjs/repo
$ mkdir my-project
$ cd my-project
$ vi hello.c
[...hack hack hack...]
$ svn import -m 'Initial project import.' file:///home/cjs/repo
Adding hello.c
Committed revision 1.
そうは言っても、共有は確かに問題です。生徒が同時に作業するときに常に一緒に作業する場合は、USBドライブを使用することができます。USBドライブを取り外して、必要なときにそれをやり取りするだけで、後で一人でプログラミングする人は、すぐにハングアップできるからです。それ。しかし、それは完全に便利ではありません。
別のオプションは、それらがすべて共有Unixシステムで動作しているように見えるため、グループの残りの部分(またはすべてのユーザー)に対して実行ビットを設定せずに読み取りビットを設定してディレクトリを作成し、その下のリポジトリにs3cr3t名を使用することです、2人の学生だけが知っている1つ。その秘密の名前を教授に渡すと、彼はいつでも学生のレポを調べることができます。 (「割り当ては時間どおりに送信されましたが、電子メールシステムはそれを失いました。そのコミットの時間を見てみましょう...」)スクリプトでこれを設定できます。
実際、そのことを考えれば考えるほど、好きになります。特定の方法では、学生はパッチを渡す(またはそうするのを忘れる)ことに対処する必要がないため、gitソリューションよりも簡単であり、学生はコミットが発生する前に、コミットする前にマージを処理する必要があります。リポジトリ(その後の処理を無期限に延期する機能)。
更新:6年後、私はSubversionの使用を二度と考えなくなりました。 Gitはその方法です。したがって、私はまだSVNは少し「より単純」だと思いますが、もはや教える価値すらありません。
私はCVS、SVN、Bazaar、およびGitを(導入の順序で)使用しており、SVNが進むべき道であると学生に言わなければなりません。実際、私はTAのリーダーでしたが、タールと電子メールのスクリプトであった古い「送信スクリプト」の代わりにSVNを実装しました。 Labstaffは、Apache SVN-DAVベースのリポジトリをセットアップし、authzファイルを使用して、TAとインストラクターが生徒ごとのディレクトリとグループプロジェクトの権限を非常に細かいレベルで制御し、生徒が最初のコミットへの非常に単純なパスを利用できるようにしました。 my tutorial を参照してください(最新のTAによって取得された資格情報..うーん..)
システム管理者の介入なしでSubversionを使用することに関して、私はこれもグループプロジェクト設定で行ったことがあります。グループメンバーの誰もこれまでにSubversionを使用したことがなく、ほとんど混乱せずにコミットしていました(1つを除くすべて)。 。また、基本的なSSHアクセスのみでこのような安全な共有リポジトリをセットアップするためのチュートリアルを作成しました here 。
私は間違いなく同意しないgitは、VCSシステムについて言及しているだけでなく、mac-daddy-ライナス自身が書いたVCSキング、git。 gitがsvnよりも複雑ではないことは事実ではなく、成熟したn00bツールが不足しているだけで、このシナリオでそれを使用しない理由として十分です。私は、Netbeansで開発している新しいプロジェクトにgitを使い始めたばかりで、Netbeans統合で深刻な制限にすでに直面していました。単一学期では、svnが提供しない機能を使用しないため、gitは過剰です。
WindowsでのSubversionはTortoiseSVNの設定と同じくらい簡単です。これを使用するための学習曲線は少しありますが(特に、以前にバージョン管理を使用したことがない場合)、半分のレッスンに専念し、PowerPointスライドをダウンロードして提供することで、それを助けることができます。
一元化について-無料のSVNプロジェクトホスティングを提供するWebサイトについて聞いたことがあります。クイックGoogle検索が表示されました this ページですが、確かにそれ以上あります。
本当に設定が本当に簡単なものを探しているなら、無料のSVNホスティングオプションを手に入れてみてください。設定する必要はありません。
悲しいことに、誰もがあなたをAssembla、Unfuddleであることをあなたに指摘したであろう2つの古いものは彼らの無料のホスティングのサポートを落としました(またはせいぜいプライベートにしたいのであれば) Origo これはまだ使用できますオープンとクローズの両方のホスティングを提供します。
これの利点は、すべてのプロジェクトを所有し、すべてに従うことができ、アクセス権を持つ人を簡単に制御できることです。リポジトリを作成する権利について心配する必要はありません。
このルートをたどり、複雑さを排除したい場合は、GUI svnアプリケーションを使用して、学習を簡単に行う必要があります(多くのマージが行われることはないと思うので)。 tortoisesvn をお勧めします。WindowsExplorerのコンテキストメニューに直接アクセスできます。
あなたの最善の策は、IT部門と協力して、学生が新しいSVN/CVSリポジトリを簡単に作成するためのシステム/方法を設定することです。
おそらく、IT部門が学生にリポジトリを作成するのに必要な特権を与えて、たとえ彼らが学生自身に特権を与えなくても、あなたに与えることができるでしょう。学期の初めに学生のリストからリポジトリを大量に作成するためのスクリプトをかなり簡単に書くことができるでしょう。
Linux用RCS。
WidowsのRCSよりも単純なものは何も見つかりませんでしたが、すべてのRCSポートが適切に機能しているわけではないので、RCSポートを試してみると単純ではなくなります。 Windowsは開発者にとって単純ではありません。 http://www.cs.purdue.edu/homes/trinkle/RCS/ からのWindowsポートはかなり良いです。