リポジトリの作成とクローンの例

スポンサーリンク
スポンサーリンク

作業ディレクトリのあるノンベアリポジトリを作成

記録したいファイルがあるディレクトリに対して

のコマンドをすることでリポジトリを作成できます。

リポジトリを作成するとその中に.gitというディレクトリが作成されます。

ノンベアリポジトリの補足(.gitの内容を少し確認)

.gitディレクトリにはGitの子のリポジトリに対しての設定やコミットされた内容が記録されていきます。
これはノンベアリポジトリであり、基本的にローカルリポジトリとして利用されます。詳しい説明は行いませんが、この.gitリポジトリを一階層下までみると以下のような感じになっています。

Git用のプロンプト文字列は__git_ps1という関数を利用するとディレクトリがGitリポジトリの時にGit用の情報が表示されるようなプロンプト文字列を生成できます。コマンド例のプロンプト文字列は

を利用したいと思います。ディレクトリとブランチ名が表示されます。色設定は行っていません。

作業ディレクトリのないベアリポジトリを作成

ベアリポジトリ(bare repository)はGitサーバーとして利用できます。また、リモートリポジトリとしても利用できます。
リモートリポジトリとして利用できるプロトコルは以下のものがあります。

  • Localプロトコル
  • HTTPプロトコル
  • SSHプロトコル
  • Gitプロトコル

このGitの記事では基本的にLocalプロトコルでリモートリポジトリを扱っていきます。LocalプロトコルはNFS(Network File System)などを利用したり、ディスクを分けて利用すると都合がよいプロトコルになります。

ベアリポジトリを作成するコマンドは、ベアリポジトリの書き込み権限を考えて以下のようになります。

ベアリポジトリのディレクトリは.gitの拡張子をつけたディレクトリが慣習的で、ベアリポジトリを作成するgit initコマンドを入力すると

ノンベアリポジトリの.gitの中身がそのまま展開されたようにファイルやディレクトリが作成されます。

ベアリポジトリの補足(--sharedでの作成時のファイル権限)

ここで権限を見てみると

775で同じグループはそれぞれの権限がありますが、その他のユーザには書き込み権限がありません。書き込み権限がないとpushコマンドでリモートリポジトリを更新できません。
また、グループについているsは実行権限がありセットGIDが設定されていることを表します。セットGIDはディレクトリにつく場合はファイル作成時の所有者のグループが親ディレクトリと同じになりまず。ディレクトリ内のファイルが一貫して特定の所有者が持つことになり、共有ディレクトリ等で利用されます。
--sharedオプションがない場合はumaskで設定されている権限になります。また、別の権限を設定したい場合はファイル権限特有の8進数での指定もあります。

グループにあるSはセットGIDがありますが実行権限がないことを表します。

ベアリポジトリへの移行

既存のノンベアリポジトリをベアリポジトリに移行やベアリポジトリを別のベアリポジトリへ移行する方法は色々あります。
例えば、

  1. 空のベアリポジトリを作成
  2. 移行したいリポジトリをベアリポジトリでクローン(これは一時的なリポジトリとして利用)
  3. クローンしたリポジトリに移動してpush --mirrorで空のリポジトリへプッシュ
  4. 一時的なリポジトリを削除

のような手順で移行できます。

例えば、ノンベアリポジトリをベアリポジトリへ移行したい場合、この手順は以下のようになります。

空のリポジトリの作成はGithubやGitLab等のホスティングサービスを利用する場合はホスティングサービスの方で行うので必要ないかもしれません。また、この例ではLocalプロトコルのため、from/.gitやto.gitはファイルパスを利用していますが、これはURLに変えても利用できるでしょう。冗長な例かもしれませんが、URLっぽくするためにGitではおそらくあまり使わないfile://の形式でも例を示します。file://の形式やノンベアリポジトリからベアリポジトリの例のため少し違和感があるかもしれませんがご了承ください。
また、コマンドは手順を上のものと合わせるため、一行で表したものを使ってみます。下の例でコマンドを'(コマンド)'のように括弧で囲んだのはサブシェルで動かしてディレクトリ移動で元に戻るコマンドを省略するためのものになります。

リポジトリをクローン

リポジトリのクローン(clone)はベアリポジトリでもノンベアリポジトリでも利用できます。
基本的に利用する場合は、ベアリポジトリに対してクローンを行います。

クローンのコマンドは

になります。cloneコマンドを利用する場合は基本的にURLを指定すると思いますが、Localプロトコルを利用する場合はファイルパス名になります。

git cloneコマンドを使ってみます。

今回は空のリポジトリをクローンしたので、少し注意を受けましたがリポジトリをクローン出来ました。

次にクローン時にディレクトリを指定した例を示します。

指定したディレクトリの中に.gitディレクトリが作成されるような感じでリポジトリがクローンされます。

(補足)デフォルトのブランチ名を設定

Gitでリポジトリを初期化したときに以下のようなメッセージが表示されました。

Gitでのデフォルトのブランチ名を変更できるというメッセージです。設定しなくてもmasterがデフォルトのブランチ名となりますが、ここで以下のようなコマンドでデフォルトのブランチ名を設定すると

長いメッセージが表示されなくなります。

この設定は人権運動の背景からデフォルトブランチ名をmasterからmainへと変更するという経緯があります(master-slaveの関係でmasterという言葉が問題です)。