1. ホーム
  2. ギット

[解決済み】Bareリポジトリと非Bareリポジトリの -実用的な- 違いは何ですか?

2022-04-03 16:49:52

質問

Gitのベアリポジトリとノンベアリポジトリ、デフォルトリポジトリについて読んでいます。両者の違いや、なぜベアリポジトリに "push"しなければならないのかについて、(理論的には)よく理解できていないのです。以下がその内容です。

現在は、私一人が3台のパソコンでプロジェクトに取り組んでいますが、後で関わる人が増えるので、バージョン管理にはGitを使っています。すべてのコンピュータにベアリポジトリをクローンし、そのうちの一台で修正を終えたら、コミットしてベアリポジトリに変更をプッシュしています。私が読んだところでは、ベアリポジトリは "作業ツリー" を持たないので、ベアリポジトリをクローンしても、私は "作業ツリー" を持つことはありません。

作業ツリーにはプロジェクトのコミット情報、ブランチなどが保存されているのでは?それはベアリポジトリには表示されないでしょう。ですから、作業ツリーでコミットをレポに "push" するのが良いように思います。

では。 なぜベアリポジトリを使用する必要があり、なぜ使用しないのか?実用上の違いは何でしょうか? それは、より多くの人がプロジェクトに携わる上でメリットがない、ということでしょう。

このような作業には、どのような方法があるのでしょうか?ご提案ください。

解決方法は?

ベアリポジトリとそうでないもののもう一つの違いは、ベアリポジトリにはデフォルトのリモート オリジン レポジトリになります。

~/Projects$ git clone --bare test bare
Initialized empty Git repository in /home/derek/Projects/bare/
~/Projects$ cd bare
~/Projects/bare$ git branch -a
* master
~/Projects/bare$ cd ..
~/Projects$ git clone test non-bare
Initialized empty Git repository in /home/derek/Projects/non-bare/.git/
~/Projects$ cd non-bare
~/Projects/non-bare$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

のマニュアルページより git clone --bare :

また、リモートのブランチヘッドも は、対応する ローカルのブランチヘッドをマッピングすることなく をrefs/remotes/origin/に追加しました。この場合 このオプションを使用すると リモート追跡ブランチと 関連する設定変数は を作成します。

おそらく、ベアリポジトリを作成するとき、Gitはベアリポジトリが複数のリモートユーザーのオリジンリポジトリとして機能することを想定しているので、デフォルトのリモートオリジンを作成しないのでしょう。 このことが意味するのは、基本的な git pullgit push の操作は動作しません。Git は、ワークスペースがなければベアリポジトリに変更をコミットするつもりがないものと見なします。

~/Projects/bare$ git push
fatal: No destination configured to push to.
~/Projects/bare$ git pull
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
~/Projects/bare$