243

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

現在、3台の異なるコンピューターでプロジェクトに取り組んでいるのは私だけですが、後でさらに多くの人が関与するため、バージョン管理にGitを使用しています。すべてのコンピューターでベアリポジトリのクローンを作成し、そのうちの1つで変更が完了したら、変更をコミットしてベアリポジトリにプッシュします。私が読んだところによると、ベアリポジトリには「作業ツリー」がないため、ベアリポジトリのクローンを作成すると、「作業ツリー」はありません。

作業ツリーには、プロジェクトからのコミット情報やブランチなどが格納されていると思います。それは裸のリポジトリには表示されません。したがって、作業ツリーを使用してリポジトリへのコミットを「プッシュ」する方がよいようです。

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

この種の仕事のためのあなたの方法は何ですか?提案?

4

11 に答える 11

109

ベア リポジトリと非ベア リポジトリのもう 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 はベア リポジトリが複数のリモート ユーザーのオリジン リポジトリとして機能すると想定するため、デフォルトのリモート オリジンは作成されません。これが意味することは、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$ 
于 2011-04-04T17:11:22.420 に答える
78

5 年遅すぎることはわかっていますが、実際にその質問に答えた人は誰もいません。

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

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

Loeliger/MCullough 本 (978-1-449-31638-9、p196/7) から直接引用するには:

むき出しのリポジトリはほとんど役に立たないように見えるかもしれませんが、その役割は非常に重要です。それは、共同開発のための信頼できる中心点として機能することです。他の開発者clonefetch裸のリポジトリとpushそれへの更新から...開発者が変更するリポジトリを設定する場合push、それは裸のはずです。実際、これは、公開されたリポジトリをむき出しにするという、より一般的なベスト プラクティスの特殊なケースです。

于 2017-03-20T10:04:47.977 に答える
77

ワークスペースはリポジトリの一部ではなく、リポジトリはワークスペースを必要としないため、裸の Git リポジトリとベアでない Git リポジトリの区別は人為的で誤解を招くものです。厳密に言えば、Git リポジトリには、リポジトリの状態を記述するオブジェクトが含まれます。これらのオブジェクトは任意のディレクトリに存在する可能性がありますが、通常.gitはワークスペースの最上位ディレクトリのディレクトリに存在します。ワークスペースは、リポジトリ内の特定のコミットを表すディレクトリ ツリーですが、任意のディレクトリに存在する場合もあれば、まったく存在しない場合もあります。環境変数$GIT_DIRは、ワークスペースを元のリポジトリにリンクします。

Git コマンドgit clonegit init両方には--bare、初期ワークスペースなしでリポジトリを作成するオプションがあります。残念なことに、Git はワークスペースとリポジトリという 2 つの別個の、しかし関連する概念を混同し、2 つの概念を分離するためにベアという紛らわしい用語を使用しています。

于 2011-04-04T19:23:00.043 に答える
74

ベア リポジトリは.gitフォルダそのものです。つまり、ベア リポジトリの内容は、ローカルの作業リポジトリ内の.gitフォルダの内容と同じです。

  • リモート サーバーでベア リポジトリを使用して、複数の貢献者が自分の作業をプッシュできるようにします。
  • 非裸 - 作業ツリーを持つものは、プロジェクトの各貢献者のローカル マシンで意味があります。
于 2015-02-10T09:58:27.473 に答える
21

裸でないリポジトリには、チェックアウトされた作業ツリーが含まれているだけです。作業ツリーには、リポジトリの状態に関する情報 (ブランチ、タグなど) は保存されません。むしろ、作業ツリーはレポ内の実際のファイルを表現したものにすぎず、ファイルを操作 (編集など) することができます。

于 2011-04-04T15:41:04.140 に答える
19

ベア リポジトリには次の利点があります。

  • ディスク使用量の削減
  • リモート プッシュに関連する問題が少ない (同期が外れたり、変更が競合したりする作業ツリーがないため)
于 2011-04-04T15:48:38.263 に答える
11

私は確かに Git の「専門家」ではありません。私はしばらく TortoiseGit を使用してきましたが、作成するたびに「ベア」レポを作成するかどうかを尋ねられたとき、それが何について話しているのか疑問に思いました。私はこのチュートリアルを読んでいました: https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-initで問題に対処していますが、まだ概念をよく理解していませんでした。これは大いに役立ちました: http://bitflop.com/tutorials/git-bare-vs-non-bare-repositories.html。さて、最初のものも理にかなっています!

これらの情報源によると、一言で言えば、配布ポイントを設定するサーバーで「ベア」レポが使用されます。ローカル マシンで使用するためのものではありません。通常、ローカル マシンからリモート サーバー上のベア リポジトリにコミットをプッシュし、自分や他の人がそのベア リポジトリからローカル マシンにプルします。したがって、GitHub、Assembla などのリモート ストレージ/配布リポジトリは、「ベア」リポジトリが作成される例です。独自の類似の「共有センター」を設定する場合は、自分で作成します。

于 2015-08-11T14:21:11.490 に答える
2

$ git help repository-layout

Git リポジトリには 2 つの異なる種類があります。

  • 作業ツリーのルートにある .git ディレクトリ。
  • ベアリポジトリ (つまり、独自の作業ツリーを持たない) である .git ディレクトリ。通常は、プッシュしたりフェッチしたりして他のユーザーと履歴を交換するために使用されます。
于 2018-12-02T16:28:01.053 に答える