我不明白如何为gitolite(非root安装)中的特定存储库创建post-receive挂钩
我的裸存储库包含一个网站,应该GIT_WORK_TREE=/path/htdocs git checkout -f
在更新时将工作目录复制到docRoot()
在gitolite之前,我只是更新特定存储库的钩子.
Gitolite文档提到所有钩子都应该在这里,hooks/common
所以我不明白它是如何工作的.
什么应该是钩子的名称,应该在哪里定位以及应该如何改变它的结构(如果它应该)?
我真的很茫然.我已经阅读了很多例子,并尝试了所有这些例子.最基本的工作正常,但任何时候我尝试移动到更复杂的东西一切都崩溃了(即使我直接复制的例子).此外,为了记录我在服务器垃圾邮件显示的gitolite版本3:
this is gitolite@ubuntuserver running gitolite3 v3.1-2-g3eefc06 on git 1.7.9.5
Run Code Online (Sandbox Code Playgroud)
所有这些说我想要完成的是(我认为)相对简单.我有一组初级开发人员[@scrubs],我只希望他们创建并提交新的分支,并能够读取/拉取master.这样我可以在合并之前查看他们的代码.
我有一群高级开发人员[@vets]我希望自由统治.
我的配置文件如下:
@scrubs = al ted matthew
@vets = kevin will guy
@offlimitbranches = master$
repo gitolite-admin
RW+ = @vets matthew
repo dawebsite
RW+ = @vets
- @offlimitbranches = @scrubs
RW+ = @scrubs
R @offlimitbranches = @scrubs
R = daemon
option deny-rules = 1
dawebsite "Owner" = "This is THE site"
Run Code Online (Sandbox Code Playgroud)
我注意到,除非我补充说:
option deny-rules = 1
Run Code Online (Sandbox Code Playgroud)
其中我认为我可能在20个例子中找到了一个(一点点咆哮原谅了挫折感.
通过这种当前的设置,兽医可以按预期做任何事情.
磨砂既不能拉动也不能推动掌握(我认为这是因为它抓住了它可能匹配的第一条规则?)磨砂也不能拉动或推动任何非主分支,也不能推动新创建的分支.每次尝试都返回相同的消息"致命:[R/W]任何dawebsite matthew DENIED由refs/heads/master $"
我尝试使用master,master $,@ offlimitbranches甚至refs/heads/master对分支引用无效.
如果有人能帮助我解决这个问题,我会非常感激.
更新**
玩弄我注意到的事情,如果我从磨砂组中移除马修并尝试直接操纵他
- …
Run Code Online (Sandbox Code Playgroud) 使用gitosis,是否可以指定写入权限,以便用户可以使用自己的名称自由推送到分支,但不能与主服务器合并?例如$ USER/test1 .. $ USER/test5
这意味着您可以为每个项目仅托管一个存储库,而不是为同一项目托管多个存储库,特定于每个用户:
project1-user1
project1-user2
project1-user3
...
project5-user1
project5-user2
project5-user3
Run Code Online (Sandbox Code Playgroud) 我正在尝试将内容从工作站推送到服务器.但它给了我一个错误.请查看以下命令和错误:
Administrator@ganesh ~/testing
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 241 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: ENV GL_RC not set
remote: BEGIN failed--compilation aborted at hooks/update line 20.
remote: error: hook declined to update refs/heads/master
To git@ganesh:repositories/testing
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@ganesh:repositories/testing'
Run Code Online (Sandbox Code Playgroud)
看来我需要设置环境变量GL_RC
.是这样吗?
这里的任何人都可以告诉我问题可能是什么以及我如何解决它?我在Windows Server 2003上使用gitolite.
我正在设置一个git-http-backend CGI脚本来处理我的git.domain
子域.服务器位于AWS云上的ELB(弹性负载平衡器)后面.我的服务器配置如下(我的git托管由gitolite处理):
<VirtualHost *:80>
ServerName git.domain
ServerAdmin hjpotter92+git@domain
#SuexecUserGroup git git
DocumentRoot /opt/gitolite/repositories/
PerlLoadModule Apache::Authn::Redmine
SetEnv GIT_PROJECT_ROOT /opt/gitolite/repositories/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER # Have also tried removing this variable
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/opt/gitolite/git-core/git-http-backend/$1
<Directory "/opt/gitolite/git-core">
AllowOverride None
Options +ExecCGI -Includes
Require all granted
</Directory>
<Location />
# enabled in desparation...
# saw it somewhere in bugzilla powered mailing list
DAV On
Order …
Run Code Online (Sandbox Code Playgroud) 我想要实现的目标如下:同事在@coworkers组,客户在@clients组.
Git仓库应该可以为每个人读写,但是应该有特殊的分支.即我创建一个新的分支"实习生"和@coworkers应该有RW + access,但客户端不应该能够R或W.
我以为我能做到这一点
repo myrepo
- intern = @clients
RW+ = @clients @coworkers
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我已经将Git存储库从网络上的共享文件夹移动到运行gitolite的SSH服务器.我为TeamCity添加了一个公钥/私钥以供使用,并将VCS根指向它.这一切都正常,因为测试连接成功,我的构建配置显示挂起的更改.
但是,当TeamCity尝试获取这些挂起的更改时,我收到以下错误:
'git fetch' command failed.
exception: Timeout exception
Run Code Online (Sandbox Code Playgroud)
切换到详细日志记录我发现它在90秒后超时 - 我认为在正常情况下,获取这些更改只需要几秒钟.
自从我开始尝试解决问题以来,我已将VCS根目录更改为"默认私钥",并添加了所需的.ssh文件夹以及config,id_rsa和known_hosts文件.我在日志中看到了指纹和密码消息,直到我将必要的东西放在这些文件中,现在我的服务器又回来再次给出Timeout异常,就像我在VCS根目录中指定密钥一样.
如果我从命令行运行Git,我可以在没有任何提示的情况下克隆存储库(当我按上面设置.ssh文件夹时).这是来自不同的用户帐户,因为TC在默认的SYSTEM帐户下作为服务运行,但我不认为这是原因,因为我说我可以看到TC已经获取了对.ssh文件夹的更改帐户.
可能有什么不对?
两周以来,我一直在努力在我们的办公室实施Git.不是缺乏文档,而是丰富的示例,教程和git的各种用途让我对Web开发的推荐设置感到困惑.
我想我有一个不错的设置,但在进入另一个结构之前,我想咨询更有经验的人.我有以下几点:
这可视化如下:
这有意义吗?我们有各种较小的PHP网站,没有什么比这更复杂的了.我的疑虑是:
现在,以下问题是一些额外的想法,目前不是最重要的,但如果你碰巧知道更多,请分享你的想法:
为简单起见,我更喜欢能够git push
从工作站运行并更新登台服务器和生产服务器.但有时,在上线之前,只更新登台服务器并首先查看那里的内容可能会有用.有一个简单的解决方案吗?
实际上,我们不仅有一个而且有几个不同的生产服务器.但只有一个登台服务器.有没有办法配置不同的生产服务器,以便git自动将它们推送到正确的服务器?
在此先感谢分享您的想法!
我已经阅读了有关钩子,类似 问题和大量代码的所有文档,但我无法跟踪我的过程中的错误.我需要在我的gitolite安装中安装一个简单的钩子(在CentOS上用rpm包制作)所以这就是我做的:
要安装gitolite(前一段时间):
# su - gitolite
$ gl-setup /tmp/fabio.pub
(作为gitolite用户)现在安装钩子:
post-update
与挂钩代码~gitolite/.gitolite/hooks/common
,并chmod +x
在其上gl-setup /tmp/fabio.pub
如此处所述再次运行但是没有任何反应,最新命令的退出状态为0,但钩子文件没有在任何存储库中进行符号链接.那我的手术有什么问题?我错过了什么吗?
奖金问题:
不知道这是否重要,我的gitolite版本是1.5.9.1
.
我在Hyper-V上的Ubuntu Server 12.04LTS(已下载并安装在15日)上有我称之为"vanilla"的安装.
Ubuntu似乎都很好.合成网卡很棒.没有检测到问题.
我的计划是使用它作为使用Gitolite的中央GIT存储库.
我已正确安装SSh(至少我认为这是因为我可以" ssh myaccount@mydomain.com
".
密钥是在我的Mac终端上生成并复制的.这工作得很好.
我的问题是,当我尝试安装Gitolite时,我收到以下错误:
No adminkey given - not setting up gitolite.
Run Code Online (Sandbox Code Playgroud)
这些是我用来执行安装的命令:
sudo apt-get install git-core
sudo apt-get install gitolite
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
sudo apt-get install git-core
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
sudo apt-get install gitolite
Run Code Online (Sandbox Code Playgroud)
......同样的结果
一些版本信息:
Git core: 1:1.7.9.5-1
Gitolite: 2.2-1
Ubuntu: 12.04
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Gitolite真的可以在Ubuntu 12.04上运行吗?
gitolite ×10
git ×8
acl ×1
apache ×1
git-svn ×1
githooks ×1
gitosis ×1
hook ×1
msysgit ×1
permissions ×1
smart-http ×1
ssh ×1
teamcity ×1
ubuntu ×1
virtualhost ×1