質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

意見交換

クローズ

3回答

796閲覧

【Git】ノンベアリポジトリにはpushできないように設計されている理由

Lemonn

総合スコア27

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

0クリップ

投稿2024/05/19 07:48

0

0

ノンベアリポジトリにpushする懸念を具体的に知りたいです。

先ほど誤ってノンベアリポジトリにpushしようとして"remote rejected"のエラーになりました。
解決法としては、
リモートリポジトリの設定確認し、falseだったらtrueにすれば良いとのことでしたが一つ疑問が生じました。

$ git config --get-all core.bare

なぜノンベアリポジトリにはpushできないようにデフォルトで設計されているのでしょうか。

ノンベアリポジトリ、ベアリポジトリについては以下の整理です。

ノンベアリポジトリはワーキングディレクトリあり
ベアリポジトリはワーキングディレクトリなし。更新情報のみ保持。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答3

#1

ikedas

総合スコア4443

投稿2024/05/19 09:31

ベアリポジトリではないリポジトリ——つまり作業ディレクトリを持つリポジトリを中央リポジトリとして使った場合、複数のユーザが同時にpushしたら作業ディレクトリの内容が壊れてしまうかもしれません。そのため、通常はそのような使いかたができなくしてあるのでしょう。

一方で、pushするユーザがただ一人だけであるような場合にはベアリポジトリでなくても安全に中央リポジトリとして使えます (そういうものを「中央」と呼ぶのはちょっと変ですが)。そのため、設定変更によってそのような使いかたもできるようにしてあるのでしょう。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

bsdfan

総合スコア4899

投稿2024/05/19 09:36

rejected が出た時のエラーメッセージにちゃんと書いてあります。

remote: error: refusing to update checked out branch: refs/heads/master remote: error: By default, updating the current branch in a non-bare repository remote: is denied, because it will make the index and work tree inconsistent remote: with what you pushed, and will require 'git reset --hard' to match remote: the work tree to HEAD.

まずですが、「ノンベアリポジトリにはpushできない」というのは間違った理解です。
「ノンベアリポジトリのcurrentブランチ(checkoutしているブランチ)にはpushできない」です。checkoutしていないブランチにならpushできます。
checkoutしているブランチにpushできた場合、ワークツリーのファイルとレポジトリのインデックスの状態で不一致を起こしてしまうから、とのことらしいです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

Lemonn

総合スコア27

投稿2024/05/19 10:57

ありがとうございます。
個人で使用していたため、複数ユーザの同時pushは考慮できておりませんでした。
大変勉強になりました。

また、今後エラーメッセージも精査するよう努めます。
お教えいただきたき大変ありがとうございました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問