我正在编写一个脚本来在当前目录的每个子目录中运行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
以任何方式修改回购,否则我不想这样做,因为我不太可能想要对许多不同的回购进行相同的更改。
答案 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