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

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

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

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

1回答

686閲覧

github 特定のリポジトリでgit pullを禁止

drop8

総合スコア3

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

0クリップ

投稿2023/10/10 08:08

概要

上記の通りですが例えば、Aのサーバー内にbリポジトリとcリポジトリがあるとして、

bリポジトリ - 本番環境
cリポジトリ - バックアップファイル

bリポジトリでは、git pullを禁止したいです。良い方法はありますでしょうか?

詳細

アナログな発想ですが作業ミスに備えて、本番環境ではgit pushのみとしたいです。(ファイルのアップはscpツール)
リポジトリ自体への制限、限定のアカウントを作成など良い方法があれば教えてください。
宜しくお願い致します。

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

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

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

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

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

hqf00342

2023/10/10 15:51 編集

サーバのリポジトリ=リモートリポジトリと勘違いしていたのですが、 GitHub等からcloneしてきたローカルリポジトリがサーバにあって、その状態を保持したいという意味で合ってますか。 その場合、そのローカルリポジトリでは git でpushもpullもcommitもできない状態(git管理外にする)のはアリなのでしょうか。 それともpushやcommitはできる状態が良いのでしょうか?
drop8

2023/10/11 08:07

>サーバのリポジトリ=リモートリポジトリと勘違いしていたのですが、 すみません、ちょっと意味を図りかねます。申し訳ございません。 >GitHub等からcloneしてきたローカルリポジトリがサーバにあって、その状態を保持したいという意味で合ってますか。 合っています。 自分はGithubを使い始めたばかりなので間違いございましたら、ご容赦頂けますでしょうか。 リモートリポジトリ == Github上のリポジトリ ローカルリポジトリ == 全メンバーのPC、実働サーバーのリポジトリ このような認識でおります。 >git でpushもpullもcommitもできない状態(git管理外にする)のはアリなのでしょうか。 >それともpushやcommitはできる状態が良いのでしょうか? push、commitができる状態を望んでおります。git管理外はナシです。 お願い致します。
guest

回答1

0

ベストアンサー

pullできない状態にする理由はあまりないです。
pullされてもgitコマンド1つで戻せますし、pullできないと困った状態になる可能性もあります。
ご理解された上で、方法として2つ記載します。

案1 bashでpullだけコマンド上書き

Linuxで特定のユーザのpullを禁止するならばユーザの.bashrcに以下を追記することでgit コマンドを上書きします。

bash:.bashrc

1function git { 2 if [[ "$1" == "pull" ]]; then 3 echo "git pull is disabled" 4 else 5 command git "$@" 6 fi 7}

ただし、git pullコマンド自体が使えなくなるので他のリポジトリでも使えなくなります。またほかのユーザはpullできます。

案2 .git/configの書き換え

特定のローカルリポジトリだけpullを止めたければ、原理上、以下の方法で実現できるはずです。

リポジトリ内の.git/config ファイルを編集します。
編集前の[remote "origin"]セクションが以下のようになっていたとした場合、

ini:.git/config(編集前)

1[remote "origin"] 2 url = https://github.com/aaa/bbb.git 3 fetch = +refs/heads/*:refs/remotes/origin/*

これを以下のように変更します。

ini:.git/config(編集後)

1[remote "origin"] 2 url = 3 fetch = +refs/heads/*:refs/remotes/origin/* 4 pushurl = https://github.com/aaa/bbb.git

(URLは自分のものに置き換えてください)
これでpushできるがpullできない状態になると思いますが、この状態で運用した経験はないので自己責任でお願いします。案1のほうが安全です。

投稿2023/10/11 10:05

hqf00342

総合スコア394

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

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

drop8

2023/10/12 01:40 編集

解決方法を丁寧に示して頂き、本当にありがとうございます。 案2 .git/configの書き換え が自分の希望です。動作確認してみたいと思います。 自分としては、開発段階の管理を行いながら、一元管理で実際の実働のファイル群もgithub経由で落とせるの希望していました。もっと一般的な構成だと思い質問していました。 追加の質問になり申し訳ございませんが、聞いてみたいです。実際に使用している現場としてはgithubにどんな範囲を持たせているのでしょうか。 * 開発段階で使用するもの。(実働環境をgit管理下に置くという発想がズレている) * 実働環境に置くなら、gitlabでDevOpsやCI/CD(自分で言っていても怪しい認知度しか持っていませんが。)を踏まえた管理を行うことが必須。 * githubの操作ミスを恐がる人なんていない。 実際の声を聞けると助かります。
hqf00342

2023/10/12 15:45

人によって考えは違うと思いますので1例ということで・・ CI/CDを導入するようなケースでは環境依存するものは別管理しているはずです。 この場合、本番への発行(デプロイ、CDのD)はgitをpullすることではないです。デプロイ用スクリプト等に基づいてファイルのコピーなどが行われます。 逆に小規模なら「git pullしてそのまま使いたい」=「git pullがデプロイ」、という要望も運用者目線ではあると思います。 これはgit pullの本来の用途ではないですがよくあるケースだと思います。 その場合、(よく考えてみると)以下の2通りかもしれません。 ①環境依存を開発用(config.development)、ステージング用(config.staging)、本番用(config.production)と用意してgitで管理。ファイルをリネームして使う or インストーラーを用意する。 ②gitで開発用ブランチと本番用ブランチを並行して管理。開発者用ブランチがmainなら、それに本番環境を反映させたproductionブランチを1つコミットし、運用者はそれを使う。 またaws等のクラウドなら環境依存パラメータを保存するサービス(パラメータストア等)も利用できます。 本来git pull はデプロイではありませんし、こうすべき、というのはあります(漏れては困るパスワードやキーはgit管理しない等)が、ただのツールですので運用しやすいように活用すればよいと思います。
drop8

2023/10/16 06:42

利用している方の声はググってもあまり出てこなくて、自分にはとても貴重な言葉でした。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問