リポジトリの作成
最終更新日:2024-09-30 | ページの編集
所要時間: 10分
概要
質問
- Gitはどこに情報を格納しますか?
目的
- ローカルのGitリポジトリを作成する。
-
.git
ディレクトリの目的を説明する。
Gitの設定ができたら、 それを使い始めることができます。
火星に惑星着陸船を送ることが可能かどうかを調査しているウルフマンとドラキュラの話に戻りましょう。
Werewolf vs dracula 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
フォルダーに作業用のディレクトリを作成し、そのディレクトリに移動しましょう:
次に、Gitにplanets
をリポジトリ(Gitがファイルのバージョンを保存できる場所)にするように伝えます。
重要なのは、git init
はサブディレクトリとそのファイルを含むことができるリポジトリを作成するということです。サブディレクトリが最初から存在する場合でも、後から追加された場合でも、planets
リポジトリの中に入れ子になった別のリポジトリを作成する必要はありません。
また、
planets
ディレクトリの作成と、リポジトリとしての初期化はまったく別の処理であることに注意してください。
ls
を使ってディレクトリの内容を表示すると、
何も変更されていないように見えます:
ですが -a
フラグを追加してすべてを表示すると、Git が
.git
という隠しディレクトリを planets
の中に作ったことがわかります:
出力
. .. .git
Git
はプロジェクトのディレクトリ内にあるすべてのファイルとサブディレクトリを含む、プロジェクトに関するすべての情報を格納するためにこの特別なサブディレクトリを使用します。
.git
サブディレクトリを削除すると、プロジェクトの履歴を失うことになります。
次に、デフォルトのブランチを main
という名前に変更します。
あなたの設定やgitのバージョンによっては、これが既にデフォルトになっているかもしれません。
この変更の詳細については、「セットアップ」
を参照してください。
出力
Switched to a new branch 'main'
We can now start using one of the most important git commands, which
is particularly helpful to beginners. git status
tells us
the status of our project, and better, a list of changes in the project
and options on what to do with those changes. We can use it as often as
we want, whenever we want to understand what is going on.
出力
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
の出力を確認します。
次のような場合は、上の方で示したように新しいリポジトリを作ることをお勧めします:
出力
fatal: Not a git repository (or any of the parent directories): .git
git init
の間違いを修正する
ウルフマンはドラキュラに、「入れ子」状態になっているリポジトリがいかに冗長で、混乱を引き起こす可能性があるかを説明しました。
Dracula would like to go back to a single git repository.
moons
サブディレクトリの最後のgit init
を、ドラキュラはどうやって、元に戻すことができるのでしょうか?
背景
Gitリポジトリからのファイルの削除は、慎重に行う必要があります。 しかし、特定のファイルを追跡するようにGitに指示する方法については、まだ学んでいません(次のエピソードで学びます)。 Gitによって追跡されていないファイルは、他の「普通の」ファイルと同じように、次のようにして簡単に削除できます:
Similarly a directory can be removed using
rm -r dirname
.
この方法で削除されるファイルやフォルダがGitによって追跡されているなら、次のエピソードで見られるように、それらの削除が、追跡する必要がある別の変更になります。
解答
Gitはすべてのファイルを.git
ディレクトリに保存します。 To
recover from this little mistake, Dracula can remove the
.git
folder in the moons subdirectory by running the
following command from inside the planets
directory:
しかし、気をつけてください!
間違ったディレクトリでこのコマンドを実行すると、残しておきたいプロジェクトのGit履歴がすべて削除されてしまいます。
In general, deleting files and directories using rm
from
the command line cannot be reversed. したがって、常に pwd
コマンドを使用してカレントディレクトリを確認してください。
まとめ
-
git init
はリポジトリを初期化する。 - Gitはリポジトリデータのすべてを
.git
ディレクトリに格納する。