「こんにちは、アミーゴ!」

"やあ!"

今日はバージョン管理システムについてお話します。

「おそらくすでにご存知かと思いますが、プログラムは多くの場合非常に大きく、作成には非常に長い時間がかかります。場合によっては、数十人がプログラムを作成するのに何年もかかることがあります。」

「数百万行のコードを含むプロジェクトは現実のものです。」

"うわあ。"

「すべてが非常に複雑です。人々は頻繁に互いに干渉し、同じコードを変更することもよくあります。」

「この混乱に秩序をもたらすために、プログラマーはコードにバージョン管理システムを使い始めました。」

"バージョン管理システムは、クライアントとサーバーで構成されるプログラムです。

「プログラムはデータ(プログラマーが書いたコード)をサーバーに保存し、プログラマーはクライアントを使用してデータを追加または変更します。」

「バージョン管理システムと、単に文書の共同作業を可能にするプログラムとの主な違いは、すべての文書 (コード ファイル) の以前のバージョンがすべて保存されることです。」

「もっと詳しく教えてもらえますか。すべてはどのように機能するのですか?」

「あなたがプログラマーで、サーバー上のリポジトリに保存されているプログラムのソース コードに小さな変更を加えたいと考えていると想像してください。」

「あなたがしなければならないことは次のとおりです。」

「1) サーバーにログインします。」

"2) Checkout コマンドを使用して、すべてのファイルの最新バージョンをコンピュータにコピーします。"

「3) 必要なファイルに変更を加えます。」

"4) プログラムをローカルで実行して、コンパイルおよび実行されることを確認します。"

"5) Commit コマンドを使用して、「変更」をサーバーに送信します。"

「それは一般的には理にかなっています。」

「しかし、それだけではありません。あなたが朝職場に到着すると想像してください。しかし、インドではすでに昼休みです。つまり、インド人の同僚はすでに変更を加えており、その変更をサーバー上のあなたのリポジトリにコミットしています。」

「最新バージョンのコードを使用する必要があります。そのため、Updateコマンドを実行します。」

「チェックアウトとどう違うのですか?」

" Checkout はリポジトリのすべてのファイルをコピーするように設計されていますが、Update は最後にCheckout / Updateコマンドを実行してからサーバー上で更新されたファイルのみを更新します。"

「おおよその仕組みは次のとおりです。」

チェックアウト:

バージョン管理システム - 1

「ここで、ファイル B を変更し、それをサーバーにアップロードしたいとします。これを行うには、Commitコマンドを使用する必要があります。」

バージョン管理システム - 2

「そして、Updateコマンドがどのように機能するかは次のとおりです。」

バージョン管理システム - 3

「面白いですね! 他にコマンドはありますか?」

「はい、かなりの数があります。しかし、どのバージョン管理プログラムを選択するかによって異なります。そこで、私は一般原則を説明しようとしているだけです。」

「マージと呼ばれる操作もあります。これは 2 つのドキュメントを結合することです。2 人のプログラマが同じファイルを同時に変更したとします。その場合、サーバー上のプログラムは両方の変更をコミットできません。最初にコミットした人が自分のファイルを追加できます。」あるいは彼女が変わるか。」

「それで、相手は何をしているの?」

「更新操作を実行してサーバーから最新の変更を取得するよう招待されます。ちなみに、コミットする前に更新を実行することは良い習慣です。」

「その後、更新操作中に、クライアント プログラムはローカルの変更をサーバーから受信した変更とマージしようとします。」

「プログラマーがファイルの別の部分を変更した場合、バージョン管理プログラムはおそらくそれらを正常にマージできるでしょう。 変更が同じ場所にある場合、バージョン管理プログラムはマージの競合を報告し、ユーザーに手動でマージするよう促します。」変更をマージします。」

「たとえば、両方のプログラマがファイルの末尾に何かを追加した場合に、これがよく起こります。」

「なるほど。全体的には妥当ですね」

そしてもう一つ、枝があります。

「チームの 2 人のプログラマーが同じモジュールを書き直す任務を負っていると想像してください。あるいは、それを最初から書き直すこともできます。このモジュールが完成するまで、プログラムは実行できず、コンパイルさえできない可能性があります。」

「それで、彼らは何をすればいいのでしょうか?」

「リポジトリにブランチを追加することで前進します。大まかに言えば、これはリポジトリが 2 つの部分に分割されることを意味します。ファイルやディレクトリごとではなく、バージョンごとに分割されます。」

電気が発見されず、ロボットが発明されなかったと想像してみてください。そうすれば、3度の解放戦争は決して起こらず、人類の歴史はすべてまったく異なる道をたどったでしょう。

「この道は歴史のもう一つの分岐です。」

「あるいは、ブランチを単なるリポジトリのコピーとしてイメージしてみてもよいでしょう。言い換えれば、ある時点で、サーバー上にリポジトリのクローンを作成しました。これにより、メイン リポジトリ (トランクと呼ばれることが多い)に加えて、 )、別の支店があります。」

「そうですね、そのほうがわかりやすいですね。

「リポジトリをコピーしたとなぜ言えなかったのですか?」

「これは単なるコピーではありません。」

「これらの枝は幹から分離するだけでなく、幹に統合することもできます。」

「言い換えれば、一部の作業はブランチ内で実行でき、それが完了したらリポジトリ ブランチをリポジトリ トランクに追加できるということですか?」

「はい。」

「それでファイルはどうなるの?」

「ファイルは結合されます。」

「そうですね、それはクールですね。実際に動作しても同じくらいクールだといいのですが。」

「それから少し。よし、休憩しよう。」

「ここには役立つ情報がたくさんあります 」