服务器上的中央git repo,从中推送

时间:2012-10-25 07:47:46

标签: git clone push pull

这很可能是一个重复的问题,但我找不到令人满意的答案。 情况是这样的,我有一个网络服务器,我可以通过ssh与它交谈,它已经安装了git。 它上面有一个代表网站的文件夹。以前,每个人都可以同时在服务器上工作(通过FTP)或者将副本下载到那台机器上,在那里工作,然后将其FTP回来。

我现在想要的是将该文件夹设为git repo,人们可以将其克隆到本地机器上。处理它,并将更改推送回服务器。

我该怎么做?我试过在服务器上创建一个repo。我可以克隆这个回购,但不能推动任何东西。我已经阅读了一些关于裸git repo的东西,但在我看来这对我的问题不起作用,因为我希望服务器上的repo是实际的网站文件夹和文件。

我真的希望有人可以提供帮助,或指出我正确的方向。

提前致谢!

3 个答案:

答案 0 :(得分:0)

从这里开始:http://git-scm.com/book/en/Git-on-the-Server。本文档广泛可用且非常全面,涵盖了有关设置git服务器的所有内容。

答案 1 :(得分:0)

我真的建议将git存储库与部署目录分开。

将存储库推送到服务器并在生产环境中部署新版本的网站必须遵守不同的工作流程。实际上你应该每天多次推送到git存储库......

鉴于您已经拥有ssh访问权限,您应该只需

  • 以您找到的标准方式使用裸存储库
  • 基于scp或rsync构建一行部署脚本(当然你应该提交此脚本)并从其中一台开发计算机执行此脚本

编辑:

这是一个网站单行部署脚本的示例:

rsync -avz --del --stats --exclude="deploy.sh" /path/Chrall/web/* someid@someweb.org:/var/www/canop/chrall

我在实际项目中使用通常略微复杂(4或5行和配置)的脚本(参考one of my github repositories)。

答案 2 :(得分:0)

准备git部署网络的简单方法:

  • 准备文件列表,其中不应共享 - 临时和数据目录 - 放入Web服务器目录中的文件.gitignore,该文件应该开始共享:< / p>

    cd /var/www/mydomain.org/
    echo temp >> .gitignore
    echo data >> .gitignore
    
  • 在此目录中启动git存储库:

    git init
    git add -A
    git commit -m "Init"
    
  • 允许推入此存储库,但它不是裸存储库:

    git config receive.denycurrentbranch false
    
  • 在推送新版本时添加挂钩以将工作树设置为当前版本 - 此脚本将在推送后启动:

    echo '#!/bin/sh'        >  .git/hooks/post-receive
    echo 'git checkout -f'  >> .git/hooks/post-receive
    echo 'git reset --hard' >> .git/hooks/post-receive
    chmod +x .git/hooks/post-receive
    

现在应该是服务器准备好的,现在您可以将存储库克隆到客户端并正常推回。