2010-12-15 99 views
1

我正在编写脚本在当前目录的每个子目录中运行git status之类的东西,因此我可以快速获取有关几个git回购站的信息。但是,我想阻止任何修改回购的命令。我不想立即提交10次回购。我不能只使用git子命令的白名单,因为我可能想运行git branch -a以查看每个回购中的分支,但不是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 2010-12-16 02:12:05

+0

那么,我仍然可以实现白名单来获取非破坏性修改的获取或推送命令,但是如果基线实现不具备通过单一错字输入命令意外中断10个回购的能力,那将会很不错。 – 2010-12-16 05:33:30

+0

实际上,如果你使用'-f',push可能是破坏性的,所以它就像你的'git branch'例子。 – MatrixFrog 2010-12-16 07:27:31

回答

0

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

+0

有关管道命令的观点是一个很好的观点,但有时候也有一些瓷器的观点。我认为白名单可能会非常繁琐的维护,但取决于用例,它可能值得一试。 – Cascabel 2010-12-15 23:12:34

1

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

$ chmod -R -w repo.git 
+2

这里的问题是,回购通常应该是可写的,而不是为了这个脚本的目的。这个操作也很难反转 - 版本库的某些内容总是为了安全而被写保护,所以你不能'chmod -R + w'来撤销它。 – Cascabel 2010-12-15 23:07:19

+0

谢谢你为我评论。这正是这个解决方案的问题。 – 2010-12-16 01:11:19

+0

另一方面,我可以使用unionfs-fuse来对我的回购库进行只读视图。 – 2010-12-16 17:26:53

4

这是一个小问题,但您可以简单地运行脚本作为对存储库没有写权限的用户。为了避免输入密码,您可以使用ssh密钥对和ssh作为该用户的自己的机器。 (或者可以通过sudoers来配置它?)

与白名单不同,这是保证不会有任何意外漏洞或过分热忱的限制。它不需要实际修改repo的权限,只需要用户的权限即可。它不需要像git-daemon那样的任何额外的设置。

(我想我应该注意,有没有内置的“只读”选项传递给饭桶。它只是试图做的事情,如果有权限,做他们。)

+0

真的,一个-1?它可能不是理想的,但这*工作*。 – Cascabel 2010-12-16 02:09:12

+0

+1这是我在阅读任何答案之前首先想到的,我认为这是最简单和风险最小的方式。保险丝解决方案很有趣,但看起来像矫枉过正。 – Kelvin 2012-07-26 15:34:22

相关问题