選択したMercurialリポジトリにプッシュを制限するには、「ssh」強制コマンドと「hg-ssh」を使用します。

選択したMercurialリポジトリにプッシュを制限するには、「ssh」強制コマンドと「hg-ssh」を使用します。

この質問の背景はhg-sshスクリプト。何かを知ることは役に立ちますが、それは重要ではありません水銀。スクリプトは公開鍵セットの適用コマンドを使用するため、サーバーに設定された公開鍵は、その秘密鍵の所有者のみがサーバー上の許可されたストレージセットにプッシュできるようにします。この強制コマンドは通常、~/.ssh/authorized_keysサーバーファイルの公開鍵の前に付けられます。この許可されたコレクションに関しては、上記のリンクのスクリプト前の文書には次のように記載されています。

You can use pattern matching of your normal shell, e.g.:
command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"

アイデアは、このパターンに一致するサーバー上のストレージにのみプッシュを許可することです。私はいつもhg-sshforceコマンドを使用します

command="cd /srv/hg && /usr/local/bin/hg-ssh * */* */*/* */*/*/*",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa [...]

/srv/hgシェルワイルドカードを使用してすべてのリポジトリを一致させます(特定の数のパスコンポーネントまで)。後で知ってみたらそうだった。いいえで始まるコンポーネントへの一致するパスが含まれています.。現在動作していない例は次のとおりです。MQリポジトリ/srv/hg/faheem/bixfile/.hg/patches。私の質問は、そのモードを選択できるかどうかです。みんな道?私は通常、正規表現よりも簡単に問題を解決するシェルワイルドカードを使用することを好みますが、ワイルドカードを使用できない場合は正規表現を使用します。

答え1

再帰一致の場合、正しいツールは通常ですfind。現在のディレクトリとそのサブディレクトリ内のすべてのファイルを特定の深さまで再帰的に一致させるには、指定しない-maxdepthでください。POSIXただし、現在すべての* BSDおよびGNU find(Linux、Cygwin)およびBusybox(組み込みLinux)に存在するため、その機能があるかどうかを確認できます。-exec … {} +POSIXに比較的新しく追加されたものですが、しばらくGNUとFreeBSD/NetBSD/OSXにもありました。

cd /srv/hg && find . -type d -maxdepth 3 -exec /usr/local/bin/hg-ssh {} +

-type d(すべての種類のファイルと一致させるためになどを使用しようとしても、ディレクトリのみを一致させたいと思うので追加します* */*。)

関連情報