1

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

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

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

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

提前致谢!

4

3 回答 3

0

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

于 2012-10-25T07:51:18.463 回答
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 行和一个配置)脚本(参考我的 github 存储库之一)。

于 2012-10-25T07:52:25.853 回答
0

准备 web 的 git 部署的简单方法:

  • 准备不应该共享的文件列表- temp 和 data 目录 - 到.gitignoreweb 服务器目录中的文件中,应该开始共享:

    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
    

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

于 2013-07-10T19:15:16.227 回答