バージョン管理システムとは何ですか。 すべてのリビジョン管理システムに共通する機能の1つは、過去に行った変更を元に戻すことができる機能です。 TortoiseSVNの機能。 シェル統合

私がパフォーマンスを測定したすべての操作で、MercurialはSubversionを上回っています。 速度は2〜6倍です ローカル Subversion 1.4.3リポジトリ(ほとんど 高速方式アクセス)。 より現実的なユースケースであるネットワークリポジトリでは、Subversionははるかに悪い位置にあります。 Subversionコマンドはサーバーと対話する必要があり、Subversionには有用なレプリケーション機能、サーバーパフォーマンス、および スループット中規模のプロジェクトでもネットワークがボトルネックになります。

さらに、Subversionは、変更されたファイルの検索(ステータス)と変更の表示(差分)などの特定の操作を実行するときにネットワーク要求を回避するために、追加のディスクスペースを必要とします。 その結果、Mercurialリポジトリにプロジェクトの完全な履歴が含まれていても、Mercurialリポジトリと作業ディレクトリを組み合わせたものと同じ大きさ(またはそれ以上)のSubversion作業コピーが作成されます。

Subversionは、サードパーティのツールを広範囲にサポートしています。 この点で、Mercurialは今や大きな遅れです。 ギャップは縮まりつつありますが、Mercurialの一部のGUIユーティリティは、Subversionのユーティリティよりも優れています。 Mercurialと同様に、Subversionには優れたユーザーマニュアルがあります。

Subversionはクライアントの変更履歴を保持しないため、多数のバイナリを含むプロジェクトの管理に適しています。 非圧縮性の10メガバイトのファイルに50の変更を加えても、Subversionで使用されるディスク容量は変更されません。 リビジョン間の違いが大きいため、分散バージョン管理システムで使用されるスペースは、変更の数に比例して急速に増加します。

さらに、通常、異なるバージョンのバイナリファイルをマージすることは困難であり、多くの場合不可能ですらあります。 Subversionを使用すると、ユーザーはファイルをロックできます。これにより、ユーザーはファイルに変更を加えるための一時的な排他的権限が与えられます。 これは、バイナリを多用するプロジェクトにとって大きなメリットになる可能性があります。

MercurialはSubversionリポジトリから変更ログをインポートできます。 逆のプロセスも可能です。 これにより、移行するかどうかを決定する前に、水域をテストし、MercurialとSubversionを同時に使用することが可能になります。 履歴の変換は段階的なプロセスであるため、最初の変換を行ってから新しい変更を加えることができます。

1.6.2。 ギット

Gitは、Linuxカーネルのソースコードを管理するために開発された分散バージョン管理システムです。 Mercurialと同様に、システムの初期設計はモノトーンの影響を受けました。

Gitはコマンドの大規模なリストを提供し、バージョン1.5.0では139の一意のユニットに達します。 習得が難しいツールとして定評があります。 Gitと比較して、Mercurialはシンプルさを強調しています。

パフォーマンスの面では、Gitは非常に高速です。 Mercurialよりも高速な場合もあれば(少なくともLinuxでは)、Mercurialよりも高速な場合もあります。 ただし、Windowsでは、パフォーマンスと一般的なサポートの両方で、この記事の執筆時点ではGitはMercurialよりもはるかに劣っています。

Mercurialリポジトリはでの操作を必要としませんが メンテナンス、Gitリポジトリには頻繁な手動が必要です 「再梱包」独自のメタデータ。 これを行わないと、占有するディスク領域の量が増えるとともに、パフォーマンスが低下し始めます。 厳密な頻度に従わない複数のGitリポジトリを含むサーバーのディスクアレイ- 「再梱包」、遅かれ早かれ眼球に詰まり、その結果、毎日のプロセス コピーを予約簡単に24時間以上かかることがあります。 ただ 「満員」 GitリポジトリはMercurialリポジトリよりもわずかに少ないスペースを占有しますが、パッケージ化されていないリポジトリは数桁大きくなります。

GitコアはCで記述されています。多くのGitコマンドは次のように実装されています。 シェルスクリプトまたはPerlスクリプトであり、これらのスクリプトの品質レベルは大きく異なります。 致命的なエラーにもかかわらずスクリプトが実行され続けるインストールをいくつか見ました。

Mercurialは、Gitリポジトリからバージョン履歴をインポートする機能を提供します。

1.6.3。 CVS

CVSは、おそらく世界で最も広く使用されているバージョン管理システムです。 その由緒ある時代と、内部を支配する混乱のために、それは長年にわたって非常に不十分に維持されてきました。

CVSは、一元化されたクライアントサーバーアーキテクチャに基づいています。 ファイルの変更をアトミックコミットにグループ化しないため、人々は簡単に 「ビルドを破る」:1人のユーザーが変更の一部をリポジトリに正常にコミットし、マージを実行する必要があるためにロックアウトされる可能性があります。 これにより、残りの参加者には、本来見られるはずの変更の一部しか表示されない状況が発生します。 この機能は、変更履歴の操作方法にも影響します。 チームメンバーの1人が特定の問題を解決するために行ったすべての変更を取得する場合は、影響を受ける各ファイルに加えられた変更の説明と日付を手動で調べる必要があります(影響を受けたファイルがすべてわかっている場合)。

CVSは、ブランチとタグのかなり紛らわしい概念を扱いますが、この本では説明しません。 ファイルとフォルダの両方の名前変更をサポートしていないため、リポジトリが非常に簡単に破損する可能性があります。 内部整合性メカニズムは事実上存在しないため、リポジトリが破損しているかどうか、および破損している場合はどのように破損しているかを確実に判断できないことがよくあります。 したがって、既存または新規のプロジェクトでCVSを使用することはお勧めしません。

Mercurialは、CVSバージョン履歴をインポートする機能を提供します。 ただし、他のCVSインポートツールでも発生するいくつかの落とし穴があります。 階層データのアトミックな変更やバージョン管理はありません ファイルシステム CVSの変更の履歴を完全に再構築することは不可能であるため、場合によっては仮定が使用され、名前の変更は通常表示されません。 多くのCVS管理タスクは手動で実行する必要があり、エラーのリスクが高まるため、CVSインポートツールが多くのリポジトリ整合性エラー(過去10年間ロックされた絶対に非現実的なリビジョン日とファイル)を返すのが一般的です。年は、私自身の経験から考えることができる最も興味深い問題のほんの2、3です)。

«

1.8。 バージョン管理の簡単な歴史

古いバージョン管理ユーティリティの中で最も有名なのはSCCS(Source Code Control System)で、これは70年代初頭にベル研究所のMarcRochkindによって作成されました。 SCCSが運営 別のファイルまた、プロジェクトで作業する各人が、単一のインスタンスに存在する共有ワークスペースにアクセスできる必要がありました。 一度にファイルを編集できるのは1人だけです。 ファイルアクセスの競合はロックで解決されました。 一般的な状況は、編集後にロックを解除するのを忘れることでした。これにより、管理者の助けなしに他の人がファイルにアクセスできなくなりました。

Walter Tichyは、1980年代初頭にSCCSの無料の代替品を開発しました。 彼は自分のプログラムをRCS(リビジョン管理システム、リビジョン管理システム)と呼びました。 SCCSと同様に、RCSでは、開発者が単一の共有ワークスペースで作業することと、複数のユーザーが同時にファイルを変更できないようにファイルをロックすることの両方が必要でした。

その後、1980年代に、Dick GruneはRCSを一連のシェルスクリプトの基礎として使用しました。元々はcmtという名前で、後にCVS(Concurrent Versions System)という名前に変更されました。 CVSの主な革新は、開発者が個人のワークスペースで同時に、ある程度は独立して作業できるようにしたことです。 SCCSとRCSで一般的だった、開発者の絶え間ない攻撃を防ぐのはこれらのスペースでした。 各開発者は各プロジェクトファイルのコピーを持っていたので、開発者は自分のコピーを個別に変更できました。 中央リポジトリに変更をコミットする直前に、独自の編集をマージする必要がありました。

Brian Berlinerは、Grünの元のスクリプトをCで書き直し、1989年にコードをリリースしました。このコードは、後にCVSの最新バージョンに進化しました。 その後、CVSはネットワーク上で動作する機能を取得し、クライアントサーバーアーキテクチャを取得しました。 CVSのアーキテクチャーは一元化されており、サーバーのみがプロジェクトの履歴のコピーを持っています。 クライアントの作業コピーには、最新のファイルインスタンスのみが含まれ、サーバーを見つけるためのメタデータはほとんど含まれていませんでした。 CVSシステムは前例のない成功を収めました。おそらく世界で最も広く使用されているバージョン管理システムです。

1990年代初頭、SunMicrosystemsはTeamWareと呼ばれる初期の分散バージョン管理システムを開発しました。 TeamWareの各作業コピーには、プロジェクトの変更履歴の完全なコピーが含まれていました。 中央リポジトリの概念は、TeamWare自体にはありませんでした。 (CVSがRCSを使用して履歴を保存したように、TeamWareはSCCSを使用しました。)

1990年代が進むにつれて、いくつかのCVS問題の認識が高まりました。 システムは、同時変更を1つの論理的にアトミックな操作にグループ化するのではなく、複数のファイルに個別に書き込みます。 ファイル階層の管理方法はあまり良くありません。ファイルとディレクトリの名前を変更することで、リポジトリを台無しにするのは簡単です。 さらに、CVSソースは理解と維持が容易ではないため、ほとんど乗り越えられません。 「痛みの閾値」これらのアーキテクチャの問題の修正。

2001年、以前CVSに取り組んだ2人の開発者であるJimBlandyとKarlFogelは、より優れたアーキテクチャとよりクリーンなコードを備えたツールに置き換えるプロジェクトを開始しました。 結果(Subversion)は、CVSの集中型クライアントサーバーモデルから離れることはありませんでしたが、複数のファイルへのアトミックコミット、より優れた名前空間管理、およびSubversionをCVSよりも優れたツールにするその他の機能を追加しました。 最初のバージョンのリリース以来、Subversionは急速に人気を博しています。

多かれ少なかれ同時に、グレイドン・ホアレは彼がモノトーンと名付けた野心的なバージョン管理システムに取り組み始めました。 このシステムは多くの問題を解消するだけではありません 内部デバイス CVSには分散アーキテクチャがありますが、その革新のいくつかでは、以前の(および後続の)バージョン管理システムを超えています。 Monotoneは、暗号化ハッシュを識別子として使用し、「 信頼 "さまざまなソースからのコード。

Mercurialの人生は2005年に始まりました。 そのアーキテクチャのいくつかの側面はMonotoneの影響を受けましたが、Mercurialは使いやすさ、高性能、および非常に大規模なプロジェクトへのスケーラビリティに重点を置いています。

あなたは素晴らしい新しいソフトウェア開発ビジネスのアイデアを持っていますか?あなたは技術的に開発する必要があります 難しい決断? または、同じタスクに取り組んでいるプログラマーの大規模なチームがありますか? 次に、次の3つの単語を覚えておいてください。バージョン管理システム .

バージョン管理システム(cvs)、2017-比較:Git、SVN、Mercurial

, また vcs- これが、多くの人がプロジェクトに取り組んでいるときにプロジェクトが崩壊するのを防ぐものです。 プログラマー、マネージャー、コピーライターは、お互いに干渉したり、修正できない損傷を引き起こしたりすることなく、それぞれ自分の作品に取り組むことができます。

概念に精通していない場合バージョン管理システム、そしてここ すべてが非常に明確に示されています。

または、GitHubのビデオをご覧ください。

では、どのバージョン管理システムがプロジェクトに適していますか?

私たちはあなたがあなたの選択をするのを助けるためにいくつかの人気のある解決策を比較しました。

これは非常に専門的な技術トピックです。 私たちは、レビューをすべての人が理解できるように努めました。 ただし、プログラミングの経験がない場合は、決定を下す前に必ず開発部門に確認してください。

バージョン管理システムよく知られているSVN(Subversion)やGitを含め、元々は開発チームが混乱を招くことなく共同プロジェクトに取り組むことができるように作成されました。 制御システムでは、コードブランチを個別に追跡し、それらへのメモを調べる必要はありません。 代わりに、中央リポジトリが使用され、すべてが順序付けられ、構造化されます。 ここでは、ファイルを更新したり、コメントを追加したり、プロジェクトのブランチをマージしたりするのに便利です。

何についての意見バージョン管理システム最良のものは大きく異なり、これはプログラマーの間で激しい議論につながります。 選択と勉強バージョン管理システムプロジェクトの場合、あるソリューションまたは別のソリューションの利点は主観的なものであることが多いことを忘れないでください。 たとえば、プログラマーの個人的な好み、またはパフォーマンス、IDEプラグイン機能などのインジケーターなどです。

バージョン管理システムの主な違いは、クライアントサーバーか分散型(p2p)かです。 コードが取得され、変更が加えられて返される中央リポジトリ(サーバー)がありますか? それともコピーですか ローカルストレージピア更新:同期、パッチ(一連の変更)の共有、および現在のコードの維持に使用される、より分散化されたネットワーク。

特定の入力/マスタリングの速度、機能、およびしきい値を検討することも価値があります制御システム。 最も一般的なものを検討してくださいバージョン管理システムプログラマーが特定のソリューションを好む理由。

同時バージョンシステム(CVS)

CVS 1980年代に登場し、現在でも商用製品開発者とオープンソース開発者の両方に人気があります。

CVS 条件に従うGNU General Public Licenseを使用すると、サーバーから目的のバージョンのプロジェクトを取得できます-"チェックアウト」(抜粋) 、次にサーバーに転送します。 "チェックイン」(返却)、変更を加えました。

もともとCVS バージョンの競合を回避するために作成されました。 すべての参加者には、ほとんどの参加者だけが提供されました 最新バージョンコード。 これは最初のバージョン管理システムでした。 ユーザーは、他のユーザーが先に進む前に、リポジトリへの変更をすばやくコミットする必要がありました。

今CVS コードブランチを使用したプロジェクトでの作業をサポートしています。 製品のいくつかのバリエーションが さまざまな特性後でマージできます。

CVSサーバー 通常はUnixで実行されますが、 CVS -クライアントは他の人気のあるで利用可能です オペレーティングシステムああ。 CVS -「成熟した」、実績のあるバージョン管理システム。 それはまだオープンソースシステムですが、最近では新しい機能が追加されることはめったにありません。

同時に、CVSNTは別のプロジェクトに分割されたバージョンです CVS にとって Windowsサーバー、-機能を積極的に拡張します。

利点:

  • 何十年にもわたって市場に出回っている長年の実績のある技術。

短所:

  • ファイルの名前変更や移動は履歴に反映されません
  • ファイルへのシンボリックリンクに関連するセキュリティリスク
  • コードの破損につながる可能性のあるアトミック操作はサポートされていません
  • 支店業務 プログラムコードこれは高価なので制御システムコードブランチを使用する長期プロジェクトは対象としていません

Apache Subversion(SVN)

SVN 代替として作成 CVS 欠点を修正するために CVS 同時に、それとの高い互換性を確保します。

CVSのように 、SVNは無料のシステムですバージョン管理 オープンソース。 唯一の違いは、Apacheライセンスの下で配布され、GNU General PublicLicense。

SVNは、いわゆるアトミック操作を使用してデータベースの整合性を維持します。 新しいバージョンがリリースされると、すべての修正が最終製品に適用されるか、まったく適用されません。 したがって、コードは、互いに矛盾し、エラーを引き起こす無秩序な部分的な変更から保護されます。

多くの開発者がに切り替えましたSVN、なぜなら 新技術最高の機会を継承 CVS 同時にそれらを拡張しました。

CVSにいる間 コードブランチを使用した操作はコストがかかり、システムアーキテクチャによって提供されないため、SVNはこのためだけに作成されます。 つまり、分岐コードと多くの開発領域を持つ大規模なプロジェクトの場合です。

SVNの欠点は比較的言及されています 低速分散バージョン管理の欠如。 分散バージョン管理 コードの更新を保存するために、集中型サーバーではなくピアツーピアモデルを使用します。 ピアツーピアモデルはオープンソースプロジェクトで最適に機能しますが、それ以外の場合は理想的ではありません。 サーバー側のアプローチの欠点は、サーバーがクラッシュしたときに、クライアントがコードにアクセスできないことです。

利点:

  • システムベース CVS
  • アトミック操作を許可します
  • コードの分岐操作はより安価です
  • 幅広いIDEプラグイン
  • ピアツーピアモデルを使用しません

短所:

  • エラーはまだ続く ファイルとディレクトリの名前変更に関連
  • リポジトリを操作するための不十分なコマンドのセット
  • 比較的低速

ギット

このシステムは、Linuxカーネルの開発を管理するために作成され、CVSやSVNとは根本的に異なるアプローチを使用しています。

基礎 ギット より高速な分散を作成するための概念が定められましたバージョン管理システム、で使用されるルールとソリューションとは対照的に CVS 。 Gitは主にLinux用に開発されたため、このOS上で最も高速に動作します。

GitはUnixライクなシステム(MacOSなど)でも動作し、WindowsプラットフォームではmSysGitパッケージが使用されます。

リポジトリのないコンピュータを使用している場合、プログラムコードが利用できない場合があります。 この問題には回避策があり、一部の開発者は、Gitの速度が不便さを補うための公正な代償であると信じています。

さらに、Gitには変更履歴をナビゲートするための多くのツールがあります。 ソースコードの各作業コピーには、開発履歴全体が含まれています。これは、インターネットに接続せずにプログラミングする場合に非常に役立ちます。

利点:

  • 嫌いな人に最適 CVS / SVN
  • パフォーマンスの大幅な向上
  • コードブランチを使用した安価な操作
  • オフラインで利用可能な完全な開発履歴
  • 分散型のピアツーピアモデル

短所:

  • 以前にSVNを使用したことがある人のための高いエントリー(学習)しきい値
  • 限定 Windowsサポート(Linuxと比較して)

Mercurial

Mercurial Gitと同時にリリースされました。 それは同じだ配布 バージョン管理システム.

Mercurialは、Linuxカーネルモジュールを開発するためのGitの代替として作成されました。 しかし、Gitが選択されたため、Mercurialの使用は少なくなっています。 ただし、たとえば、多くの主要な開発者がこのシステムを使用しています。openoffice.org .

Mercurialのバージョン管理システムは異なりますバージョン管理システムそれは主にPythonで書かれているからです(Cではありません)。 ただし、一部のパーツはCの拡張モジュールとして実装されています。

システムは分散化されてPythonで記述されているため、多くのPythonプログラマーはMercurialに傾倒しています。

ユーザーは、Mercurialは分散システムでありながらSVNの特性の一部を保持しており、この類似性のために、すでにSVNに精通している人にとっては参入障壁が低いことに注意してください。 また、Mercurialのドキュメントはより完全であり、違いにすばやく慣れることができます。

Mercurialの主な欠点の1つは、Gitとは異なり、Mercurialはスクリプトサポートではなくプラグインシステムを使用するため、2つの親ブランチをマージできないことです。 これは一部のプログラマーにとっては素晴らしいことですが、多くのプログラマーはGitの力をあきらめたくありません。

利点:

  • Gitと比較して、習得が容易です
  • 詳細なドキュメント
  • 分散モデルバージョン管理システム

短所:

  • 2つの親ブランチをマージするオプションはありません
  • スクリプトではなくプラグインを使用する
  • 非標準ソリューションの機会が少ない

どれのバージョン管理システムは私に合っています?

ほとんどの場合、開発者は CVS 彼らはそれに慣れているので。 チームがすでにプロジェクトに取り組んでいる場合は、すべての開発を別の開発に移す可能性があります制御システムどういうわけか刺激的ではありません。 それでもシステムを変更する必要がある場合は、SVNに切り替える可能性があります。

CVSはすでに「成熟したテクノロジー」のステータスに達しています。つまり、CVSは根本的な新機能やソリューションを導入しなくなります。 人々がSVNに移動すると、習慣の勢いが失われます。 そのため、CVSは徐々に過去のものになりつつあります。

今日、SVNはサーバーの中で手のひらを握っていますバージョン管理システム。 メリットが含まれています CVS そしてそれらを超えています。 有病率について話す場合、あなたはより頻繁に遭遇する可能性があります CVS またはGitやMercurialよりもSVN。 したがって、1つのサーバーテクノロジを知っていると、必須ではありませんが、移行が容易になります。

テクノロジーの幅広い使用と成熟により、SVNには大規模な知識ベースがあり、ユーザーが簡単にヘルプを入手できるようになっています。

Gitは明らかに競合他社よりも高速です。 分散下で作成されたプロジェクトの場合バージョン管理システム、これは明らかな改善です。

Gitの重大な欠点は、これがどのように微妙な違いを説明するのが難しい場合があることです。制御システム、そしてこれは、プログラマーがそれに慣れている間、ワークフローを遅くします。 ただし、「エントリのしきい値」を超えるとすぐに生産性が向上し、コードブランチの管理の利便性が費やした時間の全額を負担します。

Gitが嫌いな人(そして開発者コミュニティに批判者がいる)にとって、MercurialはSVNとGitの間の妥協点です。 このシステムは多くの有名なプロジェクトで使用されており、優れたドキュメントもあります。

と互換性があります Windows版 GitもLinuxバージョンと同じくらい高速になるように進んでいるため、Linuxで開発していない場合でも、このシステムを使用できます。

どちらが自分に最適かを理解するには、プロジェクトとチームの詳細を検討してください。 開発者と話してください!

プロジェクトで、プログラマーの小グループが作業する単一のソースツリーが必要な場合は、SVNを選択できます。 信頼性が高く、そのような場合のために設計されています。

オープンソースプロジェクトを実行している場合、それは異なる時間に複数のプログラマーによって作業されます。 一定の更新コード、Gitを選択します。 ここでは、速度とソースツリーの管理がSVNよりもはるかに優れています。

岐路に立っている場合、またはSVNやGitの動作が気に入らない場合は、Mercurialが最適です。

これらのシステムはすべて完全に機能しています。 そしてまた無料。 これらは、ソフトウェア、Webサイト、さらにはユーザーが使用して知っているオペレーティングシステムを作成するために使用されます。

まず、どちらが適切かを判断します制御システムあなたのビジネスのためのバージョン、そしてそれから-同じように重要-この選択がプログラマーを怒らせないことを確認してください。

SVN入門

SVNまたはGitを使用したことがなく、開始方法がわからない場合は、と組み合わせたホスティングソリューション GUI あなたがすぐにスピードを上げるのを手伝ってください。

ほとんどの場合のように、最も重要なことは働き始めることです、そしてそれから理解が来るでしょう。 バージョン管理システムの操作は、FTPクライアントを使用してサーバー上のファイルを操作するのと非常によく似ています。

ノート:のための多くのホスティングソリューションがありますバージョン管理システム、無料試用期間を含みます。 最初のリポジトリ(コードファイルで共同作業を行う場所)を無料で作成できます。 これらのサービスの一部を次に示します。

SVN&GITホスティング

最初のリポジトリを作成する

アカウントを作成したら、プラットフォームごとに個別にリポジトリを作成する必要があります。 通常は次のようになります。

  • アカウントにログインし、プロジェクトをクリックします。
  • プロジェクトの作成:
  • 「CreateaNew Project」の行に、プロジェクトの名前を入力します
  • 「プロジェクトの作成」ボタンをクリックします
  • SVN接続:
  • プロジェクトを作成したら、[ソース管理]タブ(ソースコードバージョン)を選択します
  • [ソース管理を有効にする]リンクをクリックします
  • リポジトリに名前を付けます
  • 「保存」をクリックします

SVNおよびGITグラフィカルクライアント

したがって、リポジトリが作成されます。 ここで、すべてが単純かつ明確に表示される必要があります。 これを行うには、グラフィカルインターフェイスが必要になります。

便利なプログラム一緒に働くバージョン管理システムマイクロソフトウィンドウズそして間違いなくこれまでで最高のApacheSubversionクライアントです。 TortoiseSVNはWindowsシェル拡張機能として実装されているため、TortoiseSVNを簡単に統合できます。ブラウザ。 さらに、34の言語パックが利用可能なオープンソースプログラムです。

SmartGit

-Gitグラフィカルクライアント(オープンソース分散バージョン管理システム)。 Windows、Mac OS X、Linuxで動作します。ライセンス費用-39ドル

「チェックアウト」リポジトリ("チェックアウト")

したがって、クライアントが選択されます。 次に、制御システムのリポジトリを作成する必要があります。 入力する必要がありますリポジトリのURL、ユーザー名、パスワード。

通常、URLは次のようになります。https:// svn .hostname.com / svn / > (有料アカウントをお持ちの場合はhttps://(SSL)を使用できます)

  1. ルートフォルダに移動し、[チェックアウト]ボタンをクリックして作成します 作業フォルダクライアントのために。 これで、ファイルを追加できます。
  2. プロジェクトファイルを抽出した後、コンピュータのローカルディレクトリでそれらを編集できるようになります。

ファイルに変更を加えたら、ツールバーの「チェックイン」ボタンをクリックしてファイルを保存します。 変更を表示してコメントを追加できます。これは非常に良いアイデアです。将来、自分が何に取り組んでいるか、どのような変更が行われたかを正確に把握し、他のプロジェクト参加者に情報を提供するためです。

クライアントは、リビジョンログまたは変更履歴を開くことにより、いつでもリビジョンの操作を開始する機能を提供する必要があります。その後、必要に応じて、に「ロールバック」できます。 前のバージョンファイルごとに個別に。 これで、基本的な概念、ドキュメントに精通しました。

ちょっとHabr。 私は、多くの記事で尽きるトピックに触れることにしました。具体的には、バージョン管理システム(以下、VCSと呼びます)の大部分が非標準(つまり、ソート不可)の使用について説明します。 プログラマーの仲間、この記事はあなたのためではないので、腐ったトマトを隠して通り過ぎましょう。 はい、皆さんはすでにGit、SVN、CVS、その他多くの流行語の複雑さをすべて学んでいます。 単なる人間であり、SLEを使用することのすべての利点を理解しましょう。
私は猫の下で、SLEに精通したいすべての人、および何らかの方法で急速に変化するデータを扱うすべての人を招待します。

なぜそれが必要なのですか

私自身は工業大学の学生であり、ほとんどの場合、ドキュメント(テキスト、図面、図面)を扱い、1日に3回(10、100)変更します。 先週行われた編集をキャンセルして、1週間前の状態でドキュメントに戻す必要があることが判明する場合があります。 さて、編集が少し行われた場合、この場合、Ctrl + Zで50回ヒットすると役立ちます。 ただし、今週中にドキュメントで多かれ少なかれアクティブな作業があった場合、「1週間前に重要な編集が行われる前」のステータスを単純に復元することはできません。 これには、「重要な改訂前」の時点でのドキュメントのコピーと、「他の重要な改訂前」、「疑わしい改訂前」、および「キャンセルが必要になる可能性が最も高い改訂前」のコピーがさらに12部必要です。 原則として、このアプローチは可能であり、多くの人によって実践されています。 最近まで、私自身、重要なバージョンのファイルを保存し、date_timeプレフィックスを付けて保存しており、満足しているようでした。 この方法の利点は単純さであり、欠点は作業フォルダーの「膨張」と使用の不便さです。 そして、それらの最初のものがどういうわけか戦うことができれば(大 ハードドライブおよび7zip)、その後、不便について何かをしなければなりませんでした。

それについて何ができるか、またはSLEとは何ですか

ウィキペディアから段落を切り取ります。「バージョン管理システム(英語バージョン管理システム、VCS、またはリビジョン管理システム)は、変更された情報の操作を容易にするソフトウェアです。 バージョン管理システムを使用すると、同じドキュメントの複数のバージョンを保存でき、必要に応じて、より多くのバージョンに戻ることができます。 初期のバージョン、誰がいつこれまたはその変更を行ったかなどを判断します。 これは、ウィキペディア自体の原則に似ています。すべての編集を含むすべてのバージョンの記事を調査できます。
したがって、多くのバージョンのファイルを保存する必要がある状況でのVCSの使用が必要です。 このアプローチの利点には、使いやすさと、いわゆるデルタ圧縮による空きディスク容量の節約が含まれます(ファイル自体が異なるバージョンで保存されていない場合、バージョンごとに変更され、保存されるデータの量が減少します)。 やってみよう。

SLEとは

同じウィキペディアは、VCSは、ベルやホイッスルの有無にかかわらず、大小を問わず、一元化および分散できることを示唆しています。 (少なくとも最初は)VCS機能の一部のみを使用するため、これには特に関心がありません。 この機能を見てみましょう。
ほとんどすべてのハードカレンシーは、使用するファイルのすべてのバージョンを格納する一種のストレージです。 ここでは、保存されているファイルのバージョンがほとんどの場合ユーザーによって決定されることを明確にする必要があります。 たとえば、12のマイナーな編集を行い、アクティビティの結果をリポジトリに保存するときが来たと判断しました。 Ctrl + Sを定期的に押すこととの類似性が思い浮かびますが、唯一の違いは、このバージョンのファイルに将来アクセスできることです。 当然、このように「一挙に」、任意のバージョンをリポジトリに追加できます。 多数ファイル。 このアクションは、簡単に言うと「コミット」または「変更のコミット」と呼ばれます。
いつでも、新しいファイルをリポジトリに追加したり、既存のファイルを削除したりできます(つまり、これがリポジトリの巧妙な呼び出し方法です)。VCSは、いつ、何を追加/削除したかを「記憶」します。 また、コミット中のコメントのおかげで、このコミットが実際に実行されている理由を説明することもできます(「そこに安物の宝石を追加」/「そこから必要な部分を削除」)。
1週間前のバージョンに戻る時が来たことにようやく気付いたとき、私たちは変化の歴史全体を持っています。 そしてここで私たちは何をすべきかを選ぶことができます。 古いファイルから目的の部分をコピーして貼り付ける必要がある場合 現行版-ストレージから古いファイルを抽出し、そこから必要なファイルをコピーするだけです。 完全にロールバックして古いバージョンでの作業を継続する必要がある場合は、SLEが再び役に立ちます。以前のバージョンに戻って、いわゆる新しいブランチ(「ブランチ」)を作成しながら、すべてを保持することができます。 1週間前のバージョンにロールバックすることで「拒否」されました。 したがって、プロジェクトのバージョン履歴は、「ルート」(プロジェクトの開始)から「ブランチ」(編集の成功と失敗)までのツリーとしてグラフィカルに表すことができます。 さらに、「ブランチ」を人為的に作成することもできます。たとえば、1つのソースファイルから2つの異なるバージョンを開発する場合、最初はいくつかのつまらないものに取り組み、2つ目は他のつまらないものに取り組みます。 さらに、作業ファイルが テキストドキュメント(そして他のいくつかでは)、異なるブランチを1つにマージすることが可能です-いわゆるマージ(「マージ」)。 ここで、何人かの人々がプロジェクトに取り組んでいて、誰もがそのような「つまらないもの」に取り組んでいると想像してみましょう。 この場合の共通リポジトリの存在は、開発を大幅に簡素化します。

理論から実践へ、またはSLEの使用を開始

ですから、SLEを使用することは良いことだとあなたに確信させたと思います。 SLEの使い方を学ぶことだけが残っています。 これが私たちが行うことです。
使用のさまざまな側面で互いに異なるさまざまなバージョン管理システムがあります。 さまざまなシステムがどのように機能するかという複雑さには(少なくとも最初は)興味がないので、最も単純で最も使いやすいシステムに焦点を当てます。 私の謙虚な意見では、そのようなシステムは、奇妙なことに、Mercurialです-「のために設計されたクロスプラットフォームの分散バージョン管理システム 効果的な仕事非常に大きなコードリポジトリで」 グラフィカルシェル TortoiseHg。 システムでの作業は、Windows、Linux、およびMac OSXで可能です。
すぐに予約して、Windowsでのシステムでの作業について説明します。 Linuxをマスターした人にとって、類推によってすべてを研究することは難しくありません。
さらに、私たちは同時に作業方法を学びます 無料ホスティング Mercurialリポジトリ-bitbucket.org、単独ではなくプロジェクトで作業している場合、または非常に便利な場合は、インターネット経由でプロジェクトのすべてのバージョンにアクセスしたい場合に必要です。 これは、以前に使用したことがある場合、基本的にDropboxの便利な代替品です。
まず、ここからMercurial + TortoiseHgをインストールします:tortoisehg.bitbucket.org。
このシステムはコンソールで動作するため、後で使いやすくするために、いくつかの*を記述します。 バットファイル典型的な操作のためのov。
すべての操作はhgコマンドによって実行されます。 パラメータなしで呼び出されると、基本的なコマンドのリストが表示されます。
選択したディレクトリ(「C:\ project \」フォルダを使用します)はリポジトリとして機能し、将来のプロジェクトのすべてのファイルを保存する必要があります。 もちろん、1台のコンピューターに複数のリポジトリーを置くことを禁止する人は誰もいません。
リポジトリを作成することをシステムが「理解」するために、次のコマンドを実行します。
hg init c:\ project
その後、「c:\ project \」フォルダが作成されます(以前に作成されていない場合)。「c:\ project \ .hg \」フォルダには、Mercurialがすべてのサービス情報を保存します。
コンピューター上のローカルリポジトリだけでなく、すべての変更を送信するリモートリポジトリも取得したいことをすぐに思い出します(または、賢い人が言うように、リモートリポジトリに変更を「プッシュ」します。英語の「プッシュ」)。 これを行うには、bitbucket.orgにアクセスして登録し、最初のリポジトリを作成します(リポジトリ-新しいリポジトリを作成します)。 リポジトリに名前を付け(わかりやすくするためにremote_projectと呼びます)、[リポジトリの作成]をクリックします。
これで、2つのリポジトリができました。ローカルは「c:\ project \」フォルダにあり、リモートは「bitbucket.org/your_account_name/remote_project/」にあります。ここで、your_account_nameはbitbucketへの登録時に指定され、remote_projectはリポジトリ。作成時に選択されます。
学習を続けるには、ローカルリポジトリに何かを置く必要があります。 その中に(私の場合は「c:\ project \」フォルダーに)将来のプロジェクトのファイルを作成するか、現在のプロジェクトをそこにコピーします。
ここで、厳密に言えば、Mercurialに「そのようなファイルといくつかの新しいフォルダーをプロジェクトフォルダーに追加しました」と伝える必要があります。これには「hgadd」コマンドが用意されています。 ただし、別のアプローチの方が便利です。次のコミットで、Mercurialに、プロジェクトフォルダーから新しく作成されたすべてのファイルを取得し、削除されたファイルを忘れるように指示します。これは、「hg addc:\ project \ new_document」を実行するよりもはるかに簡単です。新しいドキュメントを作成するたびに「.doc」。
それでは、最初のコミットに取り掛かりましょう。 次のコマンドで実行されます。
hg commit -A-m「コミットするコメント」
すべてを順番に見ていきましょう。 このコマンドは、リポジトリにいるときに入力する必要があります(つまり、最初に「cd c:\ project」を実行する必要があります)。 Mercurialが新しく作成されたファイルを「ピックアップ」するには「-A」オプションが必要です(上記を参照)。「-m」オプションを使用すると、コミットにコメントを追加できます。 これらのコメントは、TortoiseHgおよびbitbucket.orgのプロジェクトページでバージョン(またはチェンジセット-変更のリスト)を表示するときに表示されます。 後で苦しむことがないように、意味のあるコメントを付けることが非常に重要です。これまたはその編集がいつ行われたかを思い出してください。
これで、リポジトリにプロジェクトの初期バージョンが保持されます。 現在のバージョンを保存する時期であると判断した後、以降のすべてのコミットは同じ方法で実行されます。
作成されたコミットは、次のコマンドを使用してリモートリポジトリに「プッシュ」できます。
hg push https://bitbucket.org/your_account_name/remote_project
この場合、リポジトリに対応するフォルダにもいる必要があります。 コマンドを入力すると、bitbucket.orgのアカウントの名前とパスワードが要求されます。プッシュするたびに入力しないように、コマンドは次のように置き換えることができます。
hg push hg push https:// your_account_name:[email protected]/your_account_name/remote_project
* .batファイルですべてのコマンドをスコアリングするため、この場合、パスワードはクリアテキストで保存されます。これは、特定のセキュリティリスクですが、私にとっては許容範囲です。
したがって、便宜上、直接到達ゾーンに次のコンテンツを含むファイルcommit.bat、push.bat、commit&push.batを作成します。
[commit.batファイルの内容]
IF!%1 ==! goto exit1
cd C:\ project
hg commit -A -m "%*"
goto exit0
:exit1
エコー「コマンドライン引数なし!」
:exit0
引数を指定して呼び出されるこのファイルは、コミットコメントに追加された引数を使用してプロジェクトをコミットします。 例:「commit.batmy first commit」を実行し、コメント「myfirstcommit」でコミットを取得します。 FARでは、これにCtrl + Enterの組み合わせを使用すると便利です。
[push.batファイルの内容]
cd C:\ project
hg push https:// your_account_name:[email protected]/your_account_name/remote_project
このファイルはリモートリポジトリにプッシュされます。
[commit&push.batファイルの内容]
IF!%1 ==! goto exit1
cd C:\ project
hg commit -A -m "%*"
goto exit0
:exit1
エコー「コマンドライン引数なし!」
:exit0
./push.batを呼び出す
引数を指定して呼び出されるこのファイルは、コミットへのコメントに入力された引数を使用して、プロジェクトの順次コミットとプッシュを実行します。
さらに、小さな中間コミットの場合は、commit_date_time.batファイルを作成することをお勧めします。
[commit_date_time.batファイルの内容]
cd C:\ project
hg commit -A -m "%DATE %% TIME%"
このファイルは、現在の日付と時刻をコメントとしてコミットします。これは多くの場合便利です。
コミットとプッシュの頻度の問題は、行われる変更の強度と複雑さに応じて、すべての人が個別に決定します。 「より頻繁に-より良い」というルールに導かれることをお勧めしますが。
リポジトリファイル/フォルダを右クリックすると、リポジトリエクスプローラ(TortoiseHg-リポジトリエクスプローラ)を起動できます。このエクスプローラには、すべてのコミットとコメントが一覧表示されます。 このウィンドウには、リポジトリのツリー構造が表示されます。ここから、コミット、プッシュ、以前のバージョンへのロールバック(バックアウト)、およびその他の操作を実行できます。
bitbucket.org/your_account_name/remote_projectにも同様のチェンジセットのセットがあり、プロジェクトの任意のバージョンを1つのアーカイブにダウンロードできます。これも非常に便利な場合があります。
一般的に、Mercurialとの最初の知り合いは終わったと思います。 多くのための 詳細な情報で見つけることができます:translated.by/you/mercurial-the-definitive-guide/into-ru/trans/

この記事は誰のためのものですか?

私はおそらく、私が何から始めるべきかで終わります-この記事は誰のためですか? 答えは簡単です-SLEの使い方を学びたい人のために。 私は何人かのデザイナー、エンジニア、さらにはライターさえもVCSに夢中にさせることができました。 試してみると、仕事がずっと楽になるかもしれません。

P.S.「バージョン管理システム」ブログに移動しました。

タグ:タグを追加

ミシャラジオノフ

バージョン管理システムとは何ですか?なぜそれらが必要なのですか

戻る

状況を想像してみてください。たとえば、オンラインストアにクイックオーダー機能を追加するために開発者を雇いました。 サイトは常に機能し、収入を生み出す必要があるため、開発者はローカルサーバーで作業することにしました。

それが機能している間、デザイナーは新しいロゴを送信しました。これは、サイトのメインバージョンのテンプレートですぐに置き換えられました。 同時に、製品名のフォントを減らして、すべてがクライアントのネットブックの1つの画面に収まるようにしました。 次に、いくつかの製品画像を更新しました。 この時点で、開発者はあなたに好意を示すことにしました-前の開発者によって書かれた彼のバージョンのサイトで率直に言って不要な機能をクリーンアップするためです。 よくあることですが、あなたはどちらも深刻なことは何もしなかったと思います。 しかし、あなたは間違っています。

開発者のバージョンがサイトにアップロードされると、すべての開発参加者が頭を抱えます。 作業結果が消去され、エラーが発生します。 何が問題なのかは不明です。 この時点で、少なくとも手元にバックアップが機能していることを願っています。最悪の場合、手動で問題を検出するのに数日を費やします。 そのような状況に陥らないようにするにはどうすればよいですか? 教えてください。

VCSとは何ですか?

バージョン管理システム(英語から。バージョン管理システム、VCS、またはリビジョン管理システム)-情報の変更を容易に処理するためのソフトウェア。Wikipedia

そして今、簡単な方法で

バージョン管理システムを使用すると、同じドキュメントの複数のバージョンを保存したり、必要に応じて以前のバージョンに戻したり、誰がいつ変更を加えたかなどを判断できます。

つまり、VCSを使用すると、複数の開発者が、コンピューター上にローカルコピーを作成せずに、同じファイルを同時に変更できます。 この場合、変更のすべてのバリエーションが個別に保存され、さまざまな人からのさまざまな編集を考慮して、同じファイルのさまざまなバージョンを作成できます。 複数の変更がドキュメントの同じフラグメントに影響を与える場合、システムは目的のオプションを選択するように求めます。


通常、バージョン管理システムを使用するには、 別のコンピューター(サーバー)またはそのようなサーバーを借りる可能性を提供するインターネットサービス。

簡単な例

1つ以上の場合 Excelドキュメント複数の人が作業している場合、ファイルを編集できるのは1人だけで、残りの人は読み取り専用アクセスを取得します。 VCSを使用すると、ファイルを一度に全員が編集できるようになります。 唯一の条件は、変更を加えた後、ファイルをサーバーに保存する必要があることです。 ローカルコンピュータ。 ただし、前述のように、ツールを使用すると、このようなアクションを簡単かつ簡単に実行できます。

Flagスタジオのバージョン管理システム

私たちの仕事では、Gitバージョン管理システムを使用しています。 このシステムは、最も一般的なVCS​​の1つです。 これにより、Gitを使用するコミュニティから多くのサポートが得られます。 また、システムのシンプルな開発もプラスです。 広い範囲があります ソフトウェア製品このシステム用に特別に設計されています。

IntelliJIDEAと呼ばれるコード開発プログラムを使用します。 IDE、つまり、バージョン管理を操作するための便利なインターフェイスを含む、開発者向けの大規模な機能ベースを提供します。 したがって、プログラムを離れることなく、必要なサイトで開発者がどのような変更を加えたかを確認できます。 または、変更を失うことを恐れずに、別の開発者による変更を取得します。 IDEAインターフェースは次のようになります。


バージョンを保存するには、 クラウドサービス Bitbucket。 このサービスには便利なインターフェイスがあり、バージョンを保存するサービスに加えて、さまざまなユーザーの製品へのアクセスルールを管理できます。 使用する利点 クラウドストレージサーバーのセットアップと管理に関する知識の要件がないことです。 箱からすべてを取り出して、すぐに使い始めることができます。 bitbucketにアップロードするものはすべてプライベートです。 あなたの許可なしに、他の誰もあなたが何を保存しているかを見ることができません。 Bitbucketインターフェース:



何がVCSを使用できるのか

  • システムから受け取るファイルがいつでも常に最新であるという完全な自信。
  • サーバーへの接続を可能にする任意のコンピューターから必要なバージョンを取得する機能。
  • ファイルをVCSに保存することにより、同じファイルで作業している誰かが変更を再保存して上書きすることを考える必要はありません。
  • ソフトウェア開発者の場合、システムを使用すると、開発者の1人が行った変更を承認/拒否することもできます。

それは私たちの顧客に何を与えますか

最初に説明した状況に戻りましょう。 VCSの場合と同じように。 開発者は自分のコードを別のブランチにアップロードします。 変更を確認し、すべてが正常であることがわかった場合にのみ適用します。 すべてが1つの場所に、安全、迅速、便利に保管されます。 また、開発者が複数いる場合、VCSなしでは何もできません。

JavaScriptを有効にして、

多くの場合、開発者は1つのプロジェクトでチームとして作業します。つまり、複数の人が同時に1つのファイルを変更できます。 このような場合の混乱を避けるために、バージョン管理システムが使用されます。これにより、プロジェクトの変更の履歴を保存し、必要に応じて、前のバージョンに戻すことができます。

バージョニング

バージョン管理の問題をよりよく理解するために、プロジェクトの作業を終了し、最終バージョンを顧客に送信した設計者の例を考えてみましょう。 デザイナには、プロジェクトの最終バージョンが保存されているフォルダがあります。

ソース/barbershop_index_final.psd

すべてが順調で、設計者は作業を終了しましたが、顧客はそれに応じて修正を送信しました。 に戻ることができるように 古いバージョンプロジェクトでは、設計者は新しいファイルbarbershop_index_final_2.psdを作成し、変更を加えて顧客に送信しました。

ソース/barbershop_index_final.psdbarbershop_index_final_2.psd

すべてがこれに限定されることはなく、その結果、プロジェクトの構造は成長し、次のようになり始めました。

Source / barbershop_index_final.psd barbershop_index_final_2.psd ... barbershop_index_final_19.psd ... barbershop_index_latest_final.psd barbershop_index_latest_final_Final.psd

おそらく、たとえば、勉強中に学期論文を書くときに、多くの人がすでにこれに遭遇しています。 専門能力開発では、バージョン管理に新しいファイルを使用することは悪い習慣です。 開発者は通常、プロジェクトフォルダに多くのファイルを持っています。 また、複数の人が同じプロジェクトに取り組むことができます。 各開発者がバージョン管理用の新しいファイルを作成し、前のバージョンの名前を少し変更すると、プロジェクトですぐに混乱が始まり、どのファイルを開く必要があるかが誰にもわかりません。

ギット

新しいバージョンのファイルを保存する際の問題を解決するには、バージョン管理システムを使用すると便利です。 最も人気のあるものの1つはGitです。 Gitは、コンピューターゲームでの保存と読み込みのプロセスと比較できます。

  • 困難な戦いが先にある場合は、その前に事前に保存しておくことをお勧めします。
  • これを行うには、特別なコマンドを実行する必要があります。
  • その後、保存はに行きます 特別なフォルダゲームの状態が含まれています。
  • 現在、必要に応じて、ゲームの以前のバージョンにいつでも戻ることができます。

SomeGame / | -保存| | --save001.sav | | --save002.sav | | …| | フォルダを保存| | -game.exe | ...ゲームファイル

アプリケーションが機能するために必要なファイルは、ワークスペースに保存されます。 保存フォルダには、すべてのゲーム保存の履歴が含まれています。 Gitは同じ方法でプロジェクトコードを保存します:保存は特別なものになります 隠しフォルダ、およびワークスペースはルートフォルダのコンテンツです。

基本概念

GUI

特別なプログラムを使用すると、GitとGitHubの操作が簡単になります。 このようなプログラムは、便利な形式でコードの変更やコミットのリストを表示し、その他の便利な機能を備えています。 通常、このようなプログラムでは、ボタンをクリックするだけで、標準のGitコマンド(pull、push、commit other)を実行できます。

と接触している

電報

トピックの続き:
スマートテレビ

高周波ユニットには、コンバーターステージ、入力およびヘテロダイン回路が含まれています。 ファーストクラスと最高クラスの受信機、およびコンバーターの前のVHF範囲で...