2010-12-15 58 views
1

私は現在のディレクトリの各サブディレクトリにgit statusのようなものを実行するためのスクリプトを書いていますので、すぐにいくつかのgit reposに関する情報を得ることができます。しかし、私はreposを変更するコマンドを防ぐ必要があります。私は一度に10のレポを振りたいとは思わないでしょう。私はgit branch -aを各repoのブランチを見るために実行したいと思うかもしれないので、ちょうどgitサブコマンドのホワイトリストを使うことはできませんが、各repoに新しいブランチを作成するのにgit branch new-branch-nameはできません。gitを読み取り専用モードで実行する方法はありますか?

gitを実行して、repoに変更を加えるのではなく中断するようにする方法はありますが、読み取り専用コマンドを実行するときはうまく動作しますか?

編集:私がしたいことは、このように機能するgit-subdirsコマンドを作成することです:git subdirs COMMAND ARGSと入力すると、for dir in */; do cd $dir && git COMMAND ARGS && cd ..; done(追加のエラーチェックのみ)のようなことをしたいと思います。ただし、git COMMAND ARGSが何らかの方法でリポジトリを変更する場合は、私はそれをしたくないのですが、私は多くの異なるリポジトリに同じ変更を加えたいとは思わないためです。

+0

フェッチを防止しますか?私はこのようなスクリプトの非常に一般的な使用事例であることがわかります。あなたはそれをレポを変更していないと考えるかもしれませんが、間違いなくあります。 – Cascabel

+0

まあ、フェッチやプッシュのようなコマンドは、非破壊的に変更するホワイトリストを実装することはできますが、間違って1つのミスタイプコマンドで10個のレポジトリを壊すことのないベースラインの実装から開始すると良いでしょう。 –

+0

実際には、 '-f'を使うとpushは破壊的になる可能性がありますので、' git branch'の例と似ています。 – MatrixFrog

答えて

0

Iこれをunionfs-fuseを使って実装しました。これは完全に移植可能ではありませんが、Ubuntuではうまく動作します。すべてのgit reposを含むディレクトリにgit subdirs statusで試してみてください。

Githubから入手できます:https://github.com/DarwinAwardWinner/git-custom-commands

0

実際には、コマンドのホワイトリストを使用できます。例えば。 git-statusの代わりにgit-diff-filesとgit-branchを使うと、git-show-refやgit-for-each-refを使うことができます。低レベル(配管)コマンドを確認してください。おそらく、すべてのスクリプトの必要性に合わせて、簡単に焦点を絞った低レベルのコマンドを見つけることができます。

+0

配管命令についての感想は良いものですが、時には磁器のものもいくつか持っているのは良いことです。ホワイトリストは維持するのが面倒かもしれないと思っていますが、ユースケースに応じて一発の価値があります。 – Cascabel

1

なぜリポジトリディレクトリへの書き込みアクセスを拒否しないのですか?

$ chmod -R -w repo.git 
+2

ここでの問題は、reposは通常このスクリプトの目的ではなく、書き込み可能でなければならないということです。リポジトリの内容の中には、安全のために常に書き込み禁止になっているものがあるため、 'chmod -R + w'を実行して元に戻すことはできません。 – Cascabel

+0

私にコメントしていただきありがとうございます。それがまさにこのソリューションの問題です。 –

+0

一方、私はunionfs-fuseを使って私のreposの読み取り専用ビューを作ることができました。 –

4

これは少し不安ですが、あなたのスクリプトをリポジトリへの書き込み権限を持たないユーザーとして実行するだけで済みます。パスワードを入力しなくても済むようにするには、ssh鍵ペアとsshをそのユーザーとして自分のマシンに使用することができます。 (またはsudoersで設定することもできます)

ホワイトリストとは異なり、これは誤った穴や過度の制限がないことが保証されています。レポのパーミッションを実際に変更する必要はなく、それに作用するユーザのパーミッションだけです。そして、git-daemonのような特別な設定は必要ありません。

(私はgitのに渡す組み込みの「読み取り専用」のオプションがないことに留意すべきであると仮定します。これは、単に物事を行おうと、それはへのアクセス権を持っている場合は、それらを実行します。)

+0

本当に、-1?それは理想的ではないかもしれないが、これは*働く*。 – Cascabel

+0

+1これは私が答えを読む前に私が最初に考えたことです、そして、私はそれが最も簡単で最も危険な方法だと思います。ヒューズの解決策は興味深いですが、過度のように思えます。 – Kelvin

関連する問題