リポジトリの作成

最終更新日:2024-03-28 | ページの編集

概要

質問

  • Gitはどこに情報を格納しますか?

目的

  • ローカルのGitリポジトリを作成する。
  • .git ディレクトリの目的を説明する。

Gitの設定ができたら、 それを使い始めることができます。

火星に惑星着陸船を送ることが可能かどうかを調査しているウルフマンとドラキュラの話に戻りましょう。

motivatingexampleウルフマン対ドラキュラ by b-maze / Deviant Art. 火星 by European Space Agency / CC-BY-SA 3.0 IGO. 冥王星 / Courtesy NASA/JPL-Caltech. ミイラ © Gilad Fried / The Noun Project / CC BY 3.0. © Luc Viatour / https://lucnix.be / CC BY-SA 3.0.

まず、Desktopフォルダーに作業用のディレクトリを作成し、そのディレクトリに移動しましょう:

BASH

$ cd ~/Desktop
$ mkdir planets
$ cd planets

次に、Gitにplanetsリポジトリ(Gitがファイルのバージョンを保存できる場所)にするように伝えます。

BASH

$ git init

重要なのは、git init はサブディレクトリとそのファイルを含むことができるリポジトリを作成するということです。サブディレクトリが最初から存在する場合でも、後から追加された場合でも、planets リポジトリの中に入れ子になった別のリポジトリを作成する必要はありません。 また、 planetsディレクトリの作成と、リポジトリとしての初期化はまったく別の処理であることに注意してください。

ls を使ってディレクトリの内容を表示すると、 何も変更されていないように見えます:

BASH

$ ls

ですが -a フラグを追加してすべてを表示すると、Git が .gitという隠しディレクトリを planets の中に作ったことがわかります:

BASH

$ ls -a

出力

.	..	.git

Git はプロジェクトのディレクトリ内にあるすべてのファイルとサブディレクトリを含む、プロジェクトに関するすべての情報を格納するためにこの特別なサブディレクトリを使用します。 .git サブディレクトリを削除すると、プロジェクトの履歴を失うことになります。

次に、デフォルトのブランチを main という名前に変更します。 あなたの設定やgitのバージョンによっては、これが既にデフォルトになっているかもしれません。 この変更の詳細については、「セットアップ」 を参照してください。

BASH

$ git checkout -b main

出力

Switched to a new branch 'main'

プロジェクトのステータスをGitに問うことで、すべてが正しく設定されていることを確認できます:

BASH

$ git status

出力

On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

使用しているgitのバージョンによって、出力の表現が少し異なるかもしれません。

Git リポジトリを作る場所

planets (すでに作成したプロジェクト)についての情報を追跡すると共に、 ドラキュラは moons についての情報も追跡したいと考えています。 ウルフマンの心配にもかかわらず、ドラキュラは次の一連のコマンドを使って、彼の planetsプロジェクト内に moons プロジェクトを作ります:

BASH

$ cd ~/Desktop   # Desktop ディレクトリに戻る
$ cd planets     # すでに Git リポジトリである planets ディレクトリに移動する
$ ls -a          # .git サブディレクトリがまだ planets ディレクトリに存在することを確認する
$ mkdir moons    # サブディレクトリ planets/moons を作る
$ cd moons       # moons サブディレクトリに移動する
$ git init       # moons サブディレクトリをGitリポジトリにする
$ ls -a          # .git サブディレクトリが存在し新しいGitリポジトリが作られたと示していることを確認する

git init コマンドは、moons サブディレクトリ内で実行され、moons サブディレクトリに保存されているファイルを追跡するために必要でしょうか?

いいえ。 ドラキュラは moons サブディレクトリを Git リポジトリにする必要はありません。planets リポジトリは、planets ディレクトリの下のすべてのファイル、サブディレクトリ、およびサブディレクトリファイルを追跡するからです。 従って、moons についてのすべての情報を追跡するのは、ドラキュラが moons サブディレクトリをplanets ディレクトリに追加するだけで済みます。

それと、Git リポジトリが「入れ子」にされている場合、Gitリポジトリは互いに干渉する可能性があります:外側のリポジトリは内側のリポジトリのバージョン管理をしようとします。 したがって、新しいGitリポジトリはそれぞれ別のディレクトリに作るのがベストです。 ディレクトリに競合するリポジトリががないことを確認するには、git statusの出力を確認します。 次のような場合は、上の方で示したように新しいリポジトリを作ることをお勧めします:

BASH

$ git status

出力

fatal: Not a git repository (or any of the parent directories): .git

git initの間違いを修正する

ウルフマンはドラキュラに、「入れ子」状態になっているリポジトリがいかに冗長で、混乱を引き起こす可能性があるかを説明しました。 説明を聞いて、ドラキュラは「入れ子」状態のリポジトリを削除したいと思いました。 moonsサブディレクトリの最後のgit initを、ドラキュラはどうやって、元に戻すことができるのでしょうか?

背景

Gitリポジトリからのファイルの削除は、慎重に行う必要があります。 しかし、特定のファイルを追跡するようにGitに指示する方法については、まだ学んでいません(次のエピソードで学びます)。 Gitによって追跡されていないファイルは、他の「普通の」ファイルと同じように、次のようにして簡単に削除できます:

BASH

$ rm filename

同様に、rm -r dirname または rm -rf dirname を使ってディレクトリを削除することができます。 この方法で削除されるファイルやフォルダがGitによって追跡されているなら、次のエピソードで見られるように、それらの削除が、追跡する必要がある別の変更になります。

解答

Gitはすべてのファイルを.gitディレクトリに保存します。 この小さなミスから立ち直るには、ドラキュラはplanetsディレクトリの中から次のコマンドを実行して、moonsサブディレクトリの中の.gitフォルダを削除すれば良い:

BASH

$ rm -rf moons/.git

しかし、気をつけてください! 間違ったディレクトリでこのコマンドを実行すると、残しておきたいプロジェクトのGit履歴がすべて削除されてしまいます。 したがって、常に pwd コマンドを使用してカレントディレクトリを確認してください。

まとめ

  • git init はリポジトリを初期化する。
  • Gitはリポジトリデータのすべてを.gitディレクトリに格納する。