Skip to content
This repository has been archived by the owner on Feb 24, 2024. It is now read-only.

Commit

Permalink
source commit: 50fc104
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Feb 9, 2024
0 parents commit 90f5584
Show file tree
Hide file tree
Showing 53 changed files with 8,844 additions and 0 deletions.
86 changes: 86 additions & 0 deletions 01-basics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
title: 自動的なバージョン管理
teaching: 5
exercises: 0
---

::::::::::::::::::::::::::::::::::::::: objectives

- 自動バージョン管理システムの利点を理解しましょう。
- 自動バージョン管理システムの仕組みの基本を理解しましょう。

::::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::: questions

- バージョン管理とは何で、なぜそれを使うべきなのでしょうか?

::::::::::::::::::::::::::::::::::::::::::::::::::

それではまず、どのようにしてバージョン管理システムが 「いつ」、「何」を、「誰」が編集したのかを記録・管理しているかを見ていきましょう。
他の人と共同作業をしていなくても、 以下の状況に陥るより、自動的なバージョン管理を使うほうが大分良いはずです:

![「高く、深く積み上げる」Jorge Cham 作、 https://www.phdcomics.com](fig/phd101212s.png){alt='Comic: a PhD student sends "FINAL.doc" to their supervisor, but after several increasingly intense and frustrating rounds of comments and revisions they end up with a file named "FINAL_rev.22.comments49.corrections.10.#@$%WHYDIDCOMETOGRADSCHOOL????.doc"'}

皆さんもこんな経験をされたことがあるはずです。複数の、(それもほとんど 内容が同じの)文書のコピーを保存しておくのは馬鹿げたことです。 文書作成ソフトの中には、例えばMicrosoft Wordの[変更履歴](https://support.office.com/en-us/article/Track-changes-in-Word-197ba630-0f5f-4a8e-9a77-3712475e806a)、Google Docsの[バージョン履歴](https://support.google.com/docs/answer/190843?hl=en)、LibreOfficeの[変更の記録・表示](https://help.libreoffice.org/Common/Recording_and_Displaying_Changes)、こういった状況にある程度うまく対応できるものもあります。

バージョン管理システムは、基礎となるドキュメントを元に、 加えられた全ての変更点を記録していきます。 バージョン管理システムは、基礎となるドキュメントを元に、
加えられた全ての変更点を記録していきます。ドキュメントの
進歩を記録していると考えてもらって構いません。変更点を最初の状況まで
戻してから、最新版になるまでの変更を一つずつ再現していくことができます。

![](fig/play-changes.svg){alt='変更は連続して保存されます'}

「変更点」と「ドキュメント」を別々の物として考えてみると、基礎となるドキュメントに
異なる変更点を「再現」する事によって、結果的に違ったバージョンのドキュメントを
作る事が可能だという事が分かります。 例えば、下の図のように二人のユーザーが同じドキュメントに違った編集を加えた場合です。

![](fig/versions.svg){alt='異なるバージョンの保存ができます'}

変更点の衝突(コンフリクト)が無ければ、二つ以上の違った変更点を基礎ドキュメントに加えることさえできます。

![](fig/merge.svg){alt='複数のバージョンをマージできます'}

バージョン管理システムは、ユーザーがドキュメントに加えた変更点を記録するツールであり、 結果的にドキュメントの違ったバージョンを作成する事ができます。 このツールを活用 する事によって、次のバージョンに加える変更点(個々の変更点は 「[commit(コミット)](../learners/reference.md#commit)」と呼びます)を決める事ができ、変更点に関するメタデータも一緒に保存する事ができます。 特定のプロジェクトのコミット履歴とそれに関するメタデータを総じて 「[repository(リポジトリ)](\(../learners/reference.md#repository\))」と呼びます。
リポジトリは 別々のコンピュータと同期させる事が出来るので、他人との共同作業を潤滑に進めることが可能になります。

::::::::::::::::::::::::::::::::::::::::: callout

## バージョン管理システムの長い歴史

自動化されたバージョン管理システムは最近発明されたものではありません。
[RCS](https://ja.wikipedia.org/wiki/Revision_Control_System)[CVS](https://ja.wikipedia.org/wiki/Concurrent_Versions_System)[Subversion](https://ja.wikipedia.org/wiki/Apache_Subversion)などのツールは1980年前半から存在しており、多くの会社に使われていました。
しかし、これらのツールでは出来る事に制限があり、多くはもう時代遅れとされています。
現代使われているシステム、例えばGitや[Mercurial](https://swcarpentry.github.io/hg-novice/)、は _分散_されています。というのは、特定のサーバーを必要とせずにシステムをホストする事が出来るという事です。
現代のシステムには大変便利で効果的な「merge(マージ)」機能が備われており、同じファイルを 複数人で作業する事が可能になりました。

::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::: challenge

## 論文を書くにあたって

- 例えば、論文のために数百行書いたとします。しばらくして、間違えてその文章を編集してしまいます。 どうしたら以前書いた文章を取り戻すことができるのでしょう? そもそも、可能なのでしょうか?

- 五人の共著者がいるとします。 どうやって全員の変更やコメントを管理すれば良いのでしょう? LibreOffice WriterやMicrosoft Wordの場合、こういった変更やコメントを変更履歴機能で受け入れると どうなるのでしょう? 変更点は記録されるのでしょうか?

::::::::::::::: solution

## 解答

- 以前書いた数百行の回復は、古いバージョンの論文のコピーを作成した場合にのみ可能です。 前に書いた文章を失う危険性は、このページの上にある漫画に描かれているような問題のあるワークフローになることが多いです。

- 従来のワープロを使った共同執筆は面倒です。
すべての共同作業者が文書に順番に書く(執筆のプロセスを遅らせる)か、一つのバージョンをすべての全員に送り、手作業で彼らのコメントをあなたの文書にマージしなければなりません。 「変更の追跡」または「変更の記録」オプションは、変更をハイライトし、マージを簡略化することができますが、変更を受け入れるとすぐにその履歴が失われます。 そうなると、誰がその変更を提案したのか、なぜそれが提案されたのか、いつ文書にマージされたのか、わからなくなります。
Google DocsやMicrosoft Office Onlineのようなオンライン・ワープロでさえ、こうした問題を完全に解決することはできません。

:::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::: keypoints

- バージョン管理とは、制限無く「元に戻す」ことができる機能。
- バージョン管理を使えば、複数の人と同時進行で作業をする事ができます。

::::::::::::::::::::::::::::::::::::::::::::::::::
Loading

0 comments on commit 90f5584

Please sign in to comment.