回答編集履歴

3

同じマシンのケースを想定していなかったので加筆

2022/11/16 07:36

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -1,6 +1,11 @@
1
- 普通に考えて不可能ですね。
2
- ので力技で解決させる必要がりそうです。
1
+ ノンベアリポジトリが同じGitマシン内に存在するのであれば、
2
+ post-receiveファイル内でブランチ名を特定した上で、ノンベアリポジトリのディレクトリへ移動して新たなgitコマンドを発行するだけで終わりです。
3
+ 参考記事: [Gitのpost-receive Hookでブランチ名などを受け取ったりする](https://songmu.jp/riji/entry/2014-08-07-post-receive-branch.html)
3
4
 
5
+ もし別マシンだった場合が厄介です。
6
+ post-receiveという実行ファイル1個で別マシンに遠隔操作でGit操作を行わせる事になり、相当困難な作業となります。
7
+
8
+ この場合はWebhookの仕組みを活用したり、メッセージングサーバを立ち上げる事で解決します。
4
9
  こういう仕組みを作るのが上手な人なら1,2週間程度でさくっと作ってくれるかもしれませんが、
5
10
  エラーのハンドリング等も考えると大変かもしれないですね。
6
11
 

2

ノンベアリポジトリマシン→別マシンに表記を変更

2022/11/16 07:29

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  - A: 質問者さんのパソコン
14
14
  - B: Gitのサーバ
15
- - C: ノンベアリポジトリマシン
15
+ - C: 追従したい別マシン
16
16
 
17
17
  A -> Bに向けて更新したmasterブランチをpushしました。
18
18
  この時、通信はAB間で完結してしまっているので、Cはそれを知る術がありません。
@@ -46,29 +46,27 @@
46
46
  ---
47
47
 
48
48
  どうやって実行ファイル1個で
49
- ノンベアリポジトリマシンにmasterブランチの更新を知らせ
49
+ 追従したい別マシンにmasterブランチの更新を知らせてpullをさせるか?
50
- ノンベアリポジトリマシンにpullをさせるか?
51
-
52
- 今回の障壁となる部分です。
50
+ これが今回の障壁となる部分です。
53
51
 
54
52
  「Gitのサーバ」で実行ファイルを動作させても、
55
53
  影響を及ぼせるのは「Gitのサーバ」内だけです。
56
- を超えて「ノンベアリポジトリマシン」を操作しようなんて、遠隔操作・セキュリティホールに他なりません。
54
+ の垣根勝手に超えて「マシン」を操作しようなんて、遠隔操作・セキュリティホールに他なりません。
57
55
 
58
- なの用途狭めた通知する経路別途用意し
56
+ ここは「別マシン`git pull origin master`実行するだけ」の仕組み作っ
59
57
  その用途だけに使うのが良いでしょう。
60
- こうしておけば仮に悪意の第三者に知られても「ノンベアリポジトリマシンで`git pull origin master`を実行するだけ」という機能を何度も実行される程度の被害で済みます。
58
+ こうしておけば仮に悪意の第三者に知られても「マシンで`git pull origin master`を実行するだけ」という機能を何度も実行されるだけの被害で済みます。
61
59
 
62
- - ノンベアリポジトリマシンでWebサーバを稼働して、特定のURLにアクセスすると「Gitサーバのブランチが更新した」と見なしてpullを試みる
60
+ - マシンでWebサーバを稼働して、特定のURLにアクセスすると「Gitサーバのブランチが更新した」と見なしてpullを試みる
63
- - PubSub方式のメッセージングサーバを稼働させ、ノンベアリポジトリマシンはメッセージングサーバにSubscribe側として接続しっぱなしにする。GitサーバからPublishして「Gitサーバのブランチが更新」された事を検知させてpullを試みる
61
+ - PubSub方式のメッセージングサーバを稼働させ、マシンはメッセージングサーバにSubscribe側として接続しっぱなしにする。GitサーバからPublishして「Gitサーバのブランチが更新」された事を検知させてpullを試みる
64
- - Node.jsでWebSocketサーバを開設して、Gitサーバとノンベアリポジトリマシンを接続しっぱなしにする
62
+ - Node.jsでWebSocketサーバを開設して、Gitサーバとマシンを接続しっぱなしにする
65
63
 
66
64
  1番目の方法はGitHubでも[Webhook](https://docs.github.com/ja/get-started/customizing-your-github-workflow/exploring-integrations/about-webhooks)という仕組みで提供されています。
67
65
  ブランチが更新された等の契機で、機械的にHTTPアクセスを飛ばして通知します。
68
- 受け手となるノンベアリポジトリマシンにそのHTTPアクセスを受け取れるWebサーバを構築しておけば良いですね。
66
+ 受け手となるマシンにそのHTTPアクセスを受け取れるWebサーバを構築しておけば良いですね。
69
67
 
70
68
  実現だけなら最も楽だと思います。
71
- デメリットはGitサーバのpost-receive内に受け手となるノンベアリポジトリマシンへHTTPリクエストを飛ばすという情報を覚えさせる必要がある点ですね。
69
+ デメリットはGitサーバのpost-receive内に受け手となるマシンへHTTPリクエストを飛ばすという情報を覚えさせる必要がある点ですね。
72
70
  エンジニアの感覚として、なんで俺がそれを覚える必要があるの?になります。
73
71
 
74
72
  他の方法は別ルートで通知する経路を確保しておいて、

1

ちょっとした追記

2022/11/16 05:01

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -31,7 +31,6 @@
31
31
  しかし質問文にあった「該当のソースコード」の中身はテキストファイルです。
32
32
  実行ファイルじゃないのに実行出来るわけないじゃん。
33
33
 
34
-
35
34
  Linux等でテキストファイルに実行権限を付与して実行した場合、
36
35
  ファイルの1行目に書かれている`#!/bin/sh`、これを[シバン](https://e-words.jp/w/%E3%82%B7%E3%83%90%E3%83%B3.html)と呼び、
37
36
  書かれている実行ファイルを探して、そいつに読み込ませて実行するという挙動をしてくれます。
@@ -56,6 +55,10 @@
56
55
  影響を及ぼせるのは「Gitのサーバ」内だけです。
57
56
  それを超えて「ノンベアリポジトリマシン」を操作しようなんて、遠隔操作・セキュリティホールに他なりません。
58
57
 
58
+ なので用途を狭めた通知する経路を別途用意して
59
+ その用途だけに使うのが良いでしょう。
60
+ こうしておけば仮に悪意の第三者に知られても「ノンベアリポジトリマシンで`git pull origin master`を実行するだけ」という機能を何度も実行される程度の被害で済みます。
61
+
59
62
  - ノンベアリポジトリマシンでWebサーバを稼働して、特定のURLにアクセスすると「Gitサーバのブランチが更新した」と見なしてpullを試みる
60
63
  - PubSub方式のメッセージングサーバを稼働させ、ノンベアリポジトリマシンはメッセージングサーバにSubscribe側として接続しっぱなしにする。GitサーバからPublishして「Gitサーバのブランチが更新」された事を検知させてpullを試みる
61
64
  - Node.jsでWebSocketサーバを開設して、Gitサーバとノンベアリポジトリマシンを接続しっぱなしにする