我想为我的组织部署git。我希望用户无权访问服务器,只能提交到存储库。 但是,我希望存储库是一个真正的文件系统,我可以使用apache虚拟主机。 我所做的是以下内容:
cd /home/vhosts
git init --shared {projectname}
git config receive.denyCurrentBranch ignore
然后我想在每次推回主存储库后运行git reset --hard
。
这是个好主意吗?我是否应该有第二个存储库执行git pull
而不是git reset --hard
...哪个更重?我可以将其设置为hook
??
感谢。
答案 0 :(得分:3)
我对您描述的设置进行了一些修改。 Joe Maller有一个很好的写作,我用它作为我配置的基础。 A web-focused Git workflow
答案 1 :(得分:1)
通常,设置它的方法是拥有一个“裸”存储库,它是每个人推送和拉出的顶级主服务器。运行Apache的Web服务器有自己独立的存储库(如果您的硬件很短,它们可以在同一台机器上)。您将在主存储库上安装一个post-commit钩子,在/home/vhosts
下为Apache触发一个“git pull”。 (这个钩子在一台机器上最简单,但是你可以在机器上进行设置,如果你这样设置它。)
创建一个裸存储库:
mkdir -p /home/git/{projectname}.git
cd /home/git/{projectname}.git
git init --shared --bare
裸存储库根本没有工作副本,只有.git
结构的内容。
答案 2 :(得分:0)
我不确定Apache与它有什么关系。
正如Greg所说,只需设置一个仓库,一个裸仓,并将其作为您的主要仓库。然后人们从中拉出来,当他们准备好时,他们会推动它。您可能想要拒绝主回购上的非快进合并,以便人们总是提取最新代码,与其合并,然后推送。
让人们访问repo的最佳方式是使用git守护程序和git://
协议。
如果你想要一个web界面,那么使用gitweb,但这只是一种便利。
此外,section 5.1 of the Pro Git book对不同工作流程进行了一些很好的讨论,这可能有助于澄清最适合您的工作流程。