我编写了一个Web应用程序,我在专用服务器上运行,用于托管Web应用程序.此Web应用程序的实例可在不同的域中使用,每个域都有自己的Web应用程序文件副本,允许根据需要进行自定义.
我在Debian Squeeze下运行Apache/2.2.16.
我在VirtualHost指令下执行所有配置,不使用.htaccess文件.
为了简化apache配置,我想维护一个像这样的Directory指令:
<Directory "/srv/www/*/public/">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !=/robots.txt
RewriteRule ^(.+)$ /index.php?q=$1 [L,QSA]
</Directory>
Run Code Online (Sandbox Code Playgroud)
但是,RewriteRule会产生错误的结果,因为在使用通配符Directory值时,它无法删除每个目录的前缀.这是重写日志的输出:
[rid#b9832078/initial] (3) [perdir /srv/www/*/public/] applying pattern '^(.+)$' to uri '/srv/www/domain1/public/login'
[rid#b9832078/initial] (4) [perdir /srv/www/*/public/] RewriteCond: input='/srv/www/domain1/public/login' pattern='!-f' => matched
[rid#b9832078/initial] (4) [perdir /srv/www/*/public/] RewriteCond: input='/srv/www/domain1/public/login' pattern='!-d' => matched
[rid#b9832078/initial] (4) [perdir /srv/www/*/public/] RewriteCond: input='/login' pattern='!=/favicon.ico' => matched
[rid#b9832078/initial] (4) [perdir /srv/www/*/public/] RewriteCond: input='/login' pattern='!=/robots.txt' => matched
[rid#b9832078/initial] (2) [perdir /srv/www/*/public/] rewrite '/srv/www/domain1/public/login' -> …Run Code Online (Sandbox Code Playgroud) 我想做的事:
我想禁止任何合并提交要推到中央存储库.该唯一的例外,如果在合并中存在的中央存储库分支之间.我想在中央存储库中强制执行此操作.
解释为什么我想这样做:
注意:如果这个解释让你忘记了我想做的事情,那么请忽略解释.当然,我很高兴听到其他方法来解决我在下面解释的问题,但我感兴趣的答案是我想要做的事情如上所述.
我有一个中央git存储库,其中包含一些开发人员跟踪的分支.每个开发人员都为该中央存储库的分支配置了一个远程.
我们遵循此项目的同步提交策略,因此每个开发人员必须始终在推送之前在远程分支HEAD之上重新定义其最新工作.我想通过禁止任何合并提交被推送到中央存储库来强制执行此策略.唯一的例外是合并是在中央存储库中存在的分支之间.
为简化起见,我不希望开发人员的本地跟踪分支与远程分支合并.但总是在远程分支上重新定位.
我们通过设置branch.NAME.rebase =真,这有助于避免的问题,如果开发者使用的git拉部分执行该开发者的机器上,但是我们需要一个解决方案来执行这项在中央存储库侧.
一个非常基础的解决办法是用注释拒绝提交:"合并分支'NAME’GITURL的",然而,有些东西沿着如果一所有家长提交检查的线条更在中央资料库的分支路径存在会更有趣.
建议?解决方案?
编辑:
这是我到目前为止:
#!/bin/sh
read sha1old sha1new refname
# check if this is merge commit
merge_commit="`git rev-list --parents --merges --no-walk $sha1new 2> /dev/null`"
if test -n "$merge_commit"
then
# this was a merge commit
# $merge_commit contains: sha1new sha1parent_1 ... sha1parent_n
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
麻烦的地方在于确定任何两个父母的祖先是否来自一个分支.同时,由于前期收到任何裁判更新之前钩被调用时,如果推送包含提交对两个分支存在的遥控器中,其中包括两个分支之间的合并,那么我不知道什么解决办法是在这里.. .