将Git分支直接推送到实时服务器目录,以便文件可以实时显示。

13 浏览
0 Comments

将Git分支直接推送到实时服务器目录,以便文件可以实时显示。

如何在Git中设置远程目录,以便我可以将一个阶段分支本地推送到远程,并在一个暂存服务器上查看实时更改,比如stage.example.com?

我有一个想法(部分原因是我要远离SVN),可以在本地维护3个不同的“主”分支,如下所示:

  • master - 用于本地开发,工作目录
  • stage - 应该与暂存服务器目录(远程)同步
  • live - 这应该是公开访问的网站(远程)

我有一个想法(也是其他人声称可以实现的),就是我可以在本地计算机上维护这些远程“站点”,而不必不断登录到远程服务器shell并运行svn update(在我的当前svn工作流中,我需要一直这样做...)或者在我的Git工作流中运行git pull

我如何设置远程目录,以便我可以将我的stage分支本地推送到暂存远程服务器并立即在stage.example.com(例如)上看到更改?

然后,一旦stage都没问题并且测试通过,我只需要能够在本地pushlive远程,将我在stage上测试过的更改应用到生产网站上。

这样做可能吗?还是我在这里产生了一些根本无法使用Git完成的疯狂想法?

如果这里的重要性有一些统计数据:

远程服务器: Dreamhost (共享帐户)

远程GIT版本: 1.7.1.1

远程GIT客户端: shell

本地计算机: Mac Pro (Snow Leopard 10.6.6)

本地GIT版本: 1.7.2.3

本地GIT客户端: Tower.app // git-tower.com

另外,到目前为止,我尝试了以下工作流程,但没有成功:

  1. 在远程上创建一个--bare Git存储库(这样我就可以从任何地方访问它)
  2. 克隆这个远程存储库到一个本地目录,并使用Git Tower应用程序管理它
  3. 在本地工作在master(HEAD)
  4. scp -r--bare git存储库从远程服务器复制到我的远程实时域stage.example.com
  5. 将远程添加到本地工作副本,然后尝试推送到origin/stage

显然这样做行不通,但我不知道为什么,也不知道如何做得更好。

作为一个来自SVN背景的人,我对Git还不熟悉,但已经观看了很多教程(Peepcode和ThinkVitamin),但仍然无法弄清楚如何设置这个。

0
0 Comments

问题的原因:在DVCS中,如果想将Git分支直接推送到实时服务器目录中,以便文件可以实时显示,需要进行一些设置。这涉及到使用分支的推送和拉取功能,以及设置裸仓库和post-update hook。

解决方法:可以采取以下步骤来解决这个问题:

1. 创建两个分支,一个用于存储staging环境的文件(称为"staging"分支),一个用于存储live环境的文件(称为"live"分支)。

2. 创建一个远程裸仓库,用于接收推送。可以使用命令"git init --bare"创建裸仓库。

3. 在裸仓库中设置post-update hook,以便在每次推送时自动更新工作树。可以使用命令"git --work-tree=/path/to/your/live/files/ checkout live"或"git --work-tree=/path/to/your/staging/files/ checkout staging"来将裸仓库的文件检出到服务器上的相应目录中。

4. 在本地仓库中添加远程裸仓库,并可以将代码推送到staging或live分支。可以使用命令"git remote add origin "将远程裸仓库添加为本地仓库的远程仓库,并使用命令"git push origin staging"或"git push origin live"将代码推送到对应的分支。

5. 如果需要在其他计算机上进行开发,可以将远程裸仓库克隆到其他本地计算机上。

这样,就可以通过推送分支来直接将Git分支推送到实时服务器目录中,以便文件可以实时显示。

注意:在设置post-update hook时,可以使用适当的shebang(#!/usr/bin/env ruby),并使用反引号(`git ...`)将git命令包围起来。如果需要指定用户的家目录(如cd ~/stagedomain.com),可以使用ENV['HOME']来指定当前用户的家目录。

最后,需要注意的是,在执行git命令时,要确保环境变量PATH正确设置,可以通过echo $PATH来调试脚本问题。另外,如果使用--work-tree选项将工作树检出到指定目录时,需要使用完整的系统路径(如/home/username/stagedomain.com),而不能使用~来表示家目录。

希望这篇文章对解决问题有所帮助!

0