私は組み込みシステムで働いています。現在、私の組織には2人のフルタイムプログラマーと2人の臨時プログラマーがいます。同じプロジェクトが2人のプログラマーによって作業されることはまれです。すべてのコードはネットワークドライブに保存されます。現在の製品コード用のフォルダー、履歴を通じてリリースされたすべてのバージョンのソース用のフォルダー、およびアクティブな作業用の3番目のフォルダーがあります。私たちは自動システム(Mercurialが悪用されている)を使用しており、15分ごとに作業中の変更されたすべてのコードファイルのバックアップを作成するため、以前の状態に戻すことができます。
私の質問はこれです:このような環境で正式なバージョン管理システムをセットアップするのは面倒なことですか?なぜか、なぜそうでないのか?
あなたがそれを説明するように、あなたはすでにある種のバージョン管理を持っています、しかし現在典型的なバージョン管理と比較してそれにはいくつかの問題があります:
バージョン管理における意図的なコミットは、システムの現在の状態が正常に構築されると開発者が強く信じていることを示しています。
( Jacobm001のコメント で示唆されているように、例外があります。実際、いくつかのアプローチが可能であり、一部のチームはすべてのコミットをビルド可能にしようとしない方がよいでしょう。日中、システムはビルドしないいくつかのコミットを受け取る場合があります。)
コミットがないため、システムがビルドされない状態になることがよくあります。これは継続的インテグレーションを設定できないようにするです。
ちなみに、分散バージョン管理システムには利点があります。システムをビルドできない状態にしながら、必要なだけローカルコミットを実行し、システムがビルドできるときにパブリックコミットを実行できます。
バージョン管理を使用すると、コミット時にいくつかのルールを適用できます。たとえば、Pythonファイルの場合、PEP 8を実行して、コミットされたファイルが準拠していない場合にコミットを防ぐことができます。
非難アプローチを行うのは非常に困難です。
いつどのような変更が行われたか、誰が変更したかを調査することも困難です。バージョン管理logs、変更されたファイルのリスト、およびa diff
は、何が行われたかを正確に見つける優れた方法です。
すべてのマージは骨の折れる作業です(または、開発者が変更を保存する前に同僚がファイルを変更していることに気付かない場合もあります)。あなたは次のように述べました:
同じプロジェクトが2人のプログラマーによって作業されることはまれです
まれではないという意味ではないため、マージは遅かれ早かれ発生します。
15分ごとのバックアップは、開発者は最大15分の作業を失う可能性があるを意味します。これは常に問題があります。その間に行われた変更を正確に思い出すことは困難です。
ソース管理を使用すると、意味のあるコミットメッセージを作成できます。バックアップを使用すると、最後のバックアップからx分であることがわかります。
実際のバージョン管理により、常に前のコミットに戻すことができます。これは大きな利点です。システムを使用してバックアップを元に戻すことは、ほとんどのバージョン管理システムで実行できるone-click rollbackを実行するよりも少し難しいでしょう。また、あなたのシステムではBranchingは不可能です。
バージョン管理を行うためのより良い方法があり、現在の方法を変更することを検討する必要があります。特に Eric Lippertが言及しているように のように、現在のシステムはおそらく、一般的なバージョン管理システムよりも維持するのがはるかに困難です。たとえば、ネットワークドライブにGitまたはMercurialリポジトリを配置するのは簡単です。
注:一般的なバージョン管理システムに切り替えても、毎日の、または毎週のバックアップが必要ですリポジトリ。分散システムを使用している場合は、それほど重要ではありません。すべての開発者の作業コピーもバックアップです。
私の個人的な見解:バージョン管理は、半日以上かかることや、多くの試行錯誤を伴うすべて、またはその両方に役立ちます。同じキーボードとモニターを常に使用していない2人以上のユーザーが関係している場合、それは不可欠です。
初期の学習曲線を超えて、正式なバージョン管理システムを使用するコストはごくわずかです。リポジトリを初期化しますか? 2秒。ファイルを追加しますか?一秒。私が今朝試したことに戻り、破棄したものについて同僚と話し合うことができますか?何時間も何日も、簡単に。
あなたが「しかし、私たちは本当に頻繁にバックアップします!」クラッジ。
バージョン管理を使用すると、論理関数に1つの単位として属するファイル全体にそれらの変更を公開できます。 「そのマスクでの大文字と小文字を区別しないソートに何が必要でしたか?」を確認する必要がある場合は、関連するすべての変更が通知され、無関係な変更は抑制されます。
優れたバージョン管理は、ファイル名、メタデータ、およびコードの個々の行の出所を追跡します。
バージョン管理を使用すると、変更を加えた理由をすべての変更にタグ付けできます。
バージョン管理は、複数の人が一緒に作業できるようにすることではありません。コードベースの履歴記録を保証することです。何も失うことはなく、いつそれをどのようにしたかを忘れることさえできないという知識を確保して、恐れることなく自由にリファクタリング、発明、作成することができます。そして、あなたはそれを経験する前に大胆不敵が何であるかを知りません。
個々の開発者としてもバージョン管理を使用することには大きな価値があり、現在使用しているバックアップ/ファイルコピーベースのシステムよりもかなり簡単な場合があります。
特にこれと同じくらい簡単な環境で、バージョン管理システムを稼働させるのは非常に簡単です。したがって、必要な投資はそれほど高くありません。すでに述べたように、現在使用しているバックアップベースのシステムは、不必要に複雑で、壊れやすい可能性があるようです。 コミュニティがSVN、Git、またはMercurialなどのツールを構築して、ソフトウェアの複数のバージョンを維持する問題を正確に解決するために行ってきた長年の投資の恩恵を受ける必要がありますおよび多くの追加機能を提供します開発者に直接役立ちます。
正式なバージョン管理を設定して使用することで、キャリア全体に役立つ価値あるスキルセットを開発できます。ほとんどすべての専門的なソフトウェア開発環境は、バージョン管理システムを使用しています。リポジトリをセットアップして使用する方法の内外を知ることは、何度も繰り返し行うのに役立ちます。
私はMercurialに精通していませんが、私が理解していることから、それは本格的なリビジョン管理システムです。すでにある程度の知識がある場合は、VCSとして試してみる価値があります。
プロ用コードが記述されている環境常に必要ソース管理。
適切なバージョン管理システムがないため、面接の候補者がバージョン管理に何を使用するかを尋ね、ポジションを拒否する危険が常にあります。
また...もしあなたがたまたま専門家を雇うことができるなら、彼らはまたあなたの現在のバージョン管理環境を理解し、使用するのにずっと困難を感じるかもしれません。
他の人が言ったように、「今」は常にバージョン管理の使用を開始する良い機会です。優れたバージョン管理システムを使用することには、非常に多くの利点があります。
Mercurialを使用しているとおっしゃっています。他の分散vcsと同様に、いつでも独自の(プライベート)リポジトリを初期化してそこで作業できます。やってみませんか?それがあなたのために働き始めるなら、それはあなたのチームのために働くかもしれません。 DVCSはすべて、ゼロから構築することです。
バージョン管理は、実際には機能開発チームの最も重要な部分の1つです。コードは常にバックアップされるという観点とは別に、あなた(またはあなた自身)が特定のファイルに対して何をしたかを正確に理解するのに役立つコミットメッセージなどの機能を利用できます。以前のバージョンとファイルを比較し、特定のリリースのタグを作成することもできます。タグは、アプリのソースコードのバージョンx.x.xのスナップショットを基本的に作成できるという点で、非常に大きなメリットです。これにより、古いバグの追跡がはるかに簡単になります。
さまざまなプラットフォームで読み始め、ニーズに最適なものを確認してください。 IDEにSVNを活用するためのツールが統合されていたため、SVNを使用しました。皮肉なことに、現在これらのツールは使用していません。コードのチェックインとチェックアウトにはTortoise SVNを使用しています。
あなたの質問に答えるには、コードの最初の行を書いた瞬間からバージョン管理が必要です。