「こんにちは、アミーゴ!」
"やあ!"
今日はバージョン管理システムについてお話します。
「おそらくすでにご存知かと思いますが、プログラムは多くの場合非常に大きく、作成には非常に長い時間がかかります。場合によっては、数十人がプログラムを作成するのに何年もかかることがあります。」
「数百万行のコードを含むプロジェクトは現実のものです。」
"うわあ。"
「すべてが非常に複雑です。人々は頻繁に互いに干渉し、同じコードを変更することもよくあります。」
「この混乱に秩序をもたらすために、プログラマーはコードにバージョン管理システムを使い始めました。」
"バージョン管理システムは、クライアントとサーバーで構成されるプログラムです。
「プログラムはデータ(プログラマーが書いたコード)をサーバーに保存し、プログラマーはクライアントを使用してデータを追加または変更します。」
「バージョン管理システムと、単に文書の共同作業を可能にするプログラムとの主な違いは、すべての文書 (コード ファイル) の以前のバージョンがすべて保存されることです。」
「もっと詳しく教えてもらえますか。すべてはどのように機能するのですか?」
「あなたがプログラマーで、サーバー上のリポジトリに保存されているプログラムのソース コードに小さな変更を加えたいと考えていると想像してください。」
「あなたがしなければならないことは次のとおりです。」
「1) サーバーにログインします。」
"2) Checkout コマンドを使用して、すべてのファイルの最新バージョンをコンピュータにコピーします。"
「3) 必要なファイルに変更を加えます。」
"4) プログラムをローカルで実行して、コンパイルおよび実行されることを確認します。"
"5) Commit コマンドを使用して、「変更」をサーバーに送信します。"
「それは一般的には理にかなっています。」
「しかし、それだけではありません。あなたが朝職場に到着すると想像してください。しかし、インドではすでに昼休みです。つまり、インド人の同僚はすでに変更を加えており、その変更をサーバー上のあなたのリポジトリにコミットしています。」
「最新バージョンのコードを使用する必要があります。そのため、Updateコマンドを実行します。」
「チェックアウトとどう違うのですか?」
" Checkout はリポジトリのすべてのファイルをコピーするように設計されていますが、Update は最後にCheckout / Updateコマンドを実行してからサーバー上で更新されたファイルのみを更新します。"
「おおよその仕組みは次のとおりです。」
チェックアウト:

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

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

「面白いですね! 他にコマンドはありますか?」
「はい、かなりの数があります。しかし、どのバージョン管理プログラムを選択するかによって異なります。そこで、私は一般原則を説明しようとしているだけです。」
「マージと呼ばれる操作もあります。これは 2 つのドキュメントを結合することです。2 人のプログラマが同じファイルを同時に変更したとします。その場合、サーバー上のプログラムは両方の変更をコミットできません。最初にコミットした人が自分のファイルを追加できます。」あるいは彼女が変わるか。」
「それで、相手は何をしているの?」
「更新操作を実行してサーバーから最新の変更を取得するよう招待されます。ちなみに、コミットする前に更新を実行することは良い習慣です。」
「その後、更新操作中に、クライアント プログラムはローカルの変更をサーバーから受信した変更とマージしようとします。」
「プログラマーがファイルの別の部分を変更した場合、バージョン管理プログラムはおそらくそれらを正常にマージできるでしょう。 変更が同じ場所にある場合、バージョン管理プログラムはマージの競合を報告し、ユーザーに手動でマージするよう促します。」変更をマージします。」
「たとえば、両方のプログラマがファイルの末尾に何かを追加した場合に、これがよく起こります。」
「なるほど。全体的には妥当ですね」
そしてもう一つ、枝があります。
「チームの 2 人のプログラマーが同じモジュールを書き直す任務を負っていると想像してください。あるいは、それを最初から書き直すこともできます。このモジュールが完成するまで、プログラムは実行できず、コンパイルさえできない可能性があります。」
「それで、彼らは何をすればいいのでしょうか?」
「リポジトリにブランチを追加することで前進します。大まかに言えば、これはリポジトリが 2 つの部分に分割されることを意味します。ファイルやディレクトリごとではなく、バージョンごとに分割されます。」
「電気が発見されず、ロボットが発明されなかったと想像してみてください。そうすれば、3度の解放戦争は決して起こらず、人類の歴史はすべてまったく異なる道をたどったでしょう。」
「この道は歴史のもう一つの分岐です。」
「あるいは、ブランチを単なるリポジトリのコピーとしてイメージしてみてもよいでしょう。言い換えれば、ある時点で、サーバー上にリポジトリのクローンを作成しました。これにより、メイン リポジトリ (トランクと呼ばれることが多い)に加えて、 )、別の支店があります。」
「そうですね、そのほうがわかりやすいですね。
「リポジトリをコピーしたとなぜ言えなかったのですか?」
「これは単なるコピーではありません。」
「これらの枝は幹から分離するだけでなく、幹に統合することもできます。」
「言い換えれば、一部の作業はブランチ内で実行でき、それが完了したらリポジトリ ブランチをリポジトリ トランクに追加できるということですか?」
「はい。」
「それでファイルはどうなるの?」
「ファイルは結合されます。」
「そうですね、それはクールですね。実際に動作しても同じくらいクールだといいのですが。」
「それから少し。よし、休憩しよう。」
「ここには役立つ情報がたくさんあります 」
GO TO FULL VERSION