ベアリポジトリと非ベアリポジトリの実際的な違いは何ですか? 質問する

ベアリポジトリと非ベアリポジトリの実際的な違いは何ですか? 質問する

Git のベア リポジトリと非ベア / デフォルト リポジトリについて読んでいます。それらの違いを (理論的には) よく理解できず、なぜベア リポジトリに「プッシュ」する必要があるのか​​についても理解できませんでした。問題は次のとおりです。

現在、私は 3 台の異なるコンピューターでプロジェクトに取り組んでいる唯一の人物ですが、後でもっと多くの人が関与する予定なので、バージョン管理には Git を使用しています。すべてのコンピューターに bare リポジトリをクローンし、そのうちの 1 台で変更を終えたら、変更を bare リポジトリにコミットしてプッシュします。私が読んだところによると、bare リポジトリには「作業ツリー」がないので、bare リポジトリをクローンすると「作業ツリー」がなくなります。

作業ツリーには、プロジェクトのコミット情報やブランチなどが保存されていると思います。これはベア リポジトリには表示されません。そのため、作業ツリーを含むリポジトリにコミットを「プッシュ」する方がよいと思われます。

では、なぜベア リポジトリを使用する必要があるのでしょうか。また、なぜ使用しないのでしょうか。実際的な違いは何でしょうか。プロジェクトに取り組んでいるより多くの人にとって、それは有益ではないと思います。

この種の作業にはどのような方法がありますか? 何か提案はありますか?

ベストアンサー1

ベア リポジトリと非ベア リポジトリのもう 1 つの違いは、ベア リポジトリにはデフォルトのリモートオリジンリポジトリがないことです。

~/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 はベア リポジトリが複数のリモート ユーザーの origin リポジトリとして機能することを想定しているため、デフォルトのリモート origin は作成されません。つまり、Git はワークスペースがなければベア リポジトリに変更をコミットするつもりがないと想定するため、基本的なgit pull操作git pushは機能しません。

~/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$ 

おすすめ記事