有没有办法在只读模式下运行git?

时间:2010-12-15 21:15:14

标签: git readonly

我正在编写一个脚本来在当前目录的每个子目录中运行git status之类的东西,这样我就可以快速获得有关几个git repos的信息。但是,我想阻止任何修改repos的命令。我不想一次承诺十次回购。我不能只使用git子命令的白名单,因为我可能想要运行git branch -a来查看每个仓库中的分支,而不是git branch new-branch-name来在每个仓库中创建一个新的分支。

那么有没有办法运行git以便它会中止而不是对repo进行任何修改,但是在运行只读命令时工作正常?

编辑:我想要做的是制作一个git-subdirs命令,其工作原理如下:当我输入git subdirs COMMAND ARGS时,我想做for dir in */; do cd $dir && git COMMAND ARGS && cd ..; done之类的事情(仅限额外的错误检查)。除非git COMMAND ARGS以任何方式修改回购,否则我不想这样做,因为我不太可能想要对许多不同的回购进行相同的更改。

4 个答案:

答案 0 :(得分:4)

这有点笨拙,但您可以简单地将您的脚本作为对存储库没有写权限的用户运行。为了不必输入密码,您可以使用ssh密钥对和ssh作为该用户自己的机器。 (或者可以通过sudoers配置它?)

与白名单不同,保证不会出现任何意外漏洞或过度限制。它不需要实际修改repo的权限,只需要操作用户的权限。并且它不需要像git-daemon那样的额外设置。

(我想我应该注意到没有内置的“只读”选项可以传递给git。它只是尝试做事情,如果它有权限,那么就做。)

答案 1 :(得分:1)

为什么不拒绝对存储库目录的写访问权?

$ chmod -R -w repo.git

答案 2 :(得分:0)

也许您确实可以使用命令白名单。例如。而不是git-status使用git-diff-files和git-branch你可以使用git-show-ref或git-for-each-ref。确保检查低级(管道)命令。您可能会找到一个简单的低级别命令来满足您的所有脚本需求。

答案 3 :(得分:0)

我使用unionfs-fuse实现了这一点。这是完全不可移植的,但它适用于Ubuntu。在包含所有git repos的目录中使用git subdirs status进行试用。

你可以从Github获得它:https://github.com/DarwinAwardWinner/git-custom-commands