首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Git 改变了分布式 Web 开发规则 -3

Git 改变了分布式 Web 开发规则 -3

使用 Git 进行分布式 Web 开发存储库(如上文创建的存储库)包含 Git 项目中所有文件的工作副本,以及 Git 跟踪更改、分支、标记等内容时需要的所有文件。默认情况下,推入包含项目文件特定工作副本的 Git 存储库仅更新该项目的索引,而不是项目中的实际文件。这是因为如果您同时还在更新的文件上工作,更新文件本身将造成合并冲突。               
要创建可以推入的 Git 项目,您需要创建一个所谓的 存储库 — 即不包含文件工作副本,仅包含 Git 索引、反映该索引更新的对象,以及 Git 要求的其他文件。因为裸存储库不包含文件的工作副本,因此没人能真正在其中工作,它仅用作在其所包含项目上工作的所有开发人员的收集点。               
执行以下步骤可在Web 服务器上创建 一个包含网站内容且您和其他开发人员可以执行推入的 Git 存储库。该过程还将使用包含新 Git 存储库签出版本的目录以及文件推入共享 Git 存储库时更新的目录替换现有的 Web 内容目录。有许多方法可以做到这一点:为了该示例的简单易懂,您的网站上仅涉及 HTML 内容。处理网站的其他部分时可以使用相同的原则。               
  • 在 Web 服务器上使用 SSH,并更改为包含 Web 内容的目录。                                        如果 Git 没有跟踪您的 Web 内容,则使用  中描述的过程在此设置 Git 存储库。例如:                                       
    1
    2
    3
    4
    5
    $ ssh somehost
    $ cd /var/www/html
    $ git init
    $ git add .
    $ git commit -m "Initial commit"




  • 更改到上一级目录,通过复制刚刚为 Web 内容创建的项目创建一个裸 Git 存储库:
    1
    2
    $ cd ..
    $ git clone --bare html html.git




    使用 .git 扩展名创建裸存储库是一个好习惯,这样您就可以使用 gitweb 等工具查看,这些工具要求该扩展名。                                       
  • 重新命名现有的 Web 目录,并通过复制裸存储库使用相同的名称新建一个 Git 项目:
    1
    $ mv html html.OLD && git clone html.git html




    新项目目录包含对应于 Web 服务器内容的 Git 项目中所有文件的签出版本。                                       
  • 在裸存储库的 hooks 子目录中编辑(或创建)一个更新后处理(post-update)脚本,将更改推入包含 Web 内容的签出文件的新项目目录。                                        该脚本将在裸存储库跟踪的任何文件更新后执行一次。确保该脚本可以执行:                                       
    1
    2
    3
    $ pushd html.git/hooks
    $ emacs post-update
    $ chmod 755 post-update




    更新后处理脚本应该类似 。                                       
    清单 1. 更新后处理脚本
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    #
    WEB_DIR="/var/www/html"
    export GIT_DIR="$WEB_DIR/.git"
    pushd $WEB_DIR > /dev/null
    git pull
    popd > /dev/null




    注意,该脚本必须使用 /bin/bash 作为解释器才能使用该 shell 的 pushd                                                 和 popd 内置命令。如果已经存在更新后处理文件,您可以在验证解释器之后将脚本的其余部分添加到该文件。您必须确保现有更新后处理脚本中的现有命令前面没有 exec 命令,它会阻止执行文件中的后续行。                                       
现在,您或任何开发人员可以在 Web 服务器上复制裸存储库并开始处理您的网站。您和任何其他开发人员都可以一起处理网站的文件,可以执行任何以下任务:               
  • 在网站签出中处理文件并直接推入共享的中央存储库。
  • 在网站签出中处理文件并将您签出中的提交更改推入合作方的签出。在将文件推入共享中央存储库(及网站)之前您可以协作处理这些文件。
尽管 Git 比大部分 VCS 要快很多,但如果您要处理的是一个大型的复杂网站且用户很多,在网站目录中直接工作是不现实的。访客可能会接受到某些文件的更新,而其他文件却尚未更新。如果尚未收到 CSS 更新,而使用它们的更新页面已经被加载,那么很可能出现问题。通常可以使用两种方法避免这个问题:一是在 Web 服务器中使用符号链接之类的解决方案以实际指向您的内容目录,并在希望激活更新内容时切换它们;二是修改 Web 服务器配置文件以指向其他目录,并在希望激活新内容时重启 Web 服务器。
返回列表