这看起来似乎是一个愚蠢的问题,但我觉得我对GIT理解得相当好,但我似乎无法按照自己的意愿设置我的开发环境。我要么错过了一些非常简单的东西,要么就是我错了:)
我在我的服务器上初始化了一个裸git repo,将它克隆到我的本地机器,提交了我的文件并推送到原点。然后,在本地我创建了三个分支(主,发布,开发)并将它们全部发布到原点。我打算让多个开发人员从开发分支中撤出,我想确保他们不能推向主分支,但对于另一个问题可能更好。
现在,我在本地对文件进行了更改,然后将它们上传到测试服务器并通过Web浏览器检查测试服务器。我不得不想象这是大多数人测试他们的工作的方式,除非他们将他们的计算机配置为Web服务器并安装了php和mysql。一旦我对我的变化感到满意,我就把它们推到原始仓库,一切正常。
我的挑战在于让测试服务器与本地计算机保持同步。我已经尝试在我的远程测试目录中设置一个repo,并且我已经在我的本地git repo中添加了第二个远程,希望我可以推送到测试仓库,以便将测试服务器上的文件与我的本地文件同步。但我无法弄清楚如何使用两个遥控器并使它们与我的本地机器保持同步。
如果我创建一个新的本地分支,请检查它以开始处理新功能,然后将分支推送到我的测试远程,测试远程的头部仍然是主设备,而不是我的新功能分支。因此,我在本地对功能分支进行更改,但是当我通过coda将更改发布到测试服务器时,我实际上是在更改测试仓库的主分支上的文件。如果我无法将测试快照与本地快照保持同步,我不知道如何充分利用gits分支功能。
我在本地开发和测试真的非常重要吗?当您需要远程测试时,如何使用git建立开发环境?有一个测试回购完全错误的方式来考虑这个?必须有一种方法可以使用多个遥控器并将它们签出到最新的分支,这样您就可以在测试服务器上远程同步本地文件的实例。请帮助!
答案 0 :(得分:3)
最好在本地测试。你可以用这种方式更快地迭代。快速迭代非常重要。您花在git推送和远程连接延迟上的时间加起来,并且比建立一个完整的本地开发环境花费更多。
无论哪种方式,在某些时候,您还需要远程测试您的更改。您可以使用测试服务器上的post-receive挂钩来完成此操作。这是一种方法。
在测试服务器上:
帖子接收钩子脚本:
#!/bin/sh
while read oldrev newrev refname
do
upgrade_sh=./upgrade.sh
if test -e $upgrade_sh; then
upgrade_sh=$(readlink $upgrade_sh || echo $upgrade_sh)
echo calling upgrade script: $upgrade_sh
$upgrade_sh $refname
else
echo NOT calling non-existent upgrade script: $upgrade_sh
fi
done
将其放入.git/hooks
测试中,并使其可执行。
我通常将upgrade.sh
脚本保留在我的项目中的版本控制下,并从hooks
目录创建一个符号链接。升级脚本的upgrade.sh
主要工作是将部署目录重置为您推送的分支:
#!/bin/sh -e
unset GIT_DIR
git checkout -f $1
在大多数情况下,您希望做的不仅仅是这些,例如在我的Django网站上,我需要重新生成静态内容并重新启动信号到Apache。
我希望这会帮助你开始。