从Git开发到生产设置
我知道像这样的问题被问了很多。但是,我没有找到我问题的确切答案。我正在开始使用Git。我以前没有使用Git或任何类型的版本控制的经验。到目前为止,我已经能够在本地安装并运行它,没有任何问题。我可以通过终端使用Git,我还开始修补SourceTree应用程序 当我尝试远程设置时,我的问题就出现了。我在服务器上安装了Git。我已在远程暂存服务器上创建了一个存储库。我可以通过SourceTree推到它。但是,远程存储库似乎并没有连接到web根目录。我在本地对分支进行更改,提交、合并,然后推送到远程。但是,这些更改不在通过临时服务器提供的页面上吗 在远程服务器上,我在web根目录之外创建了一个目录,用于保存存储库项目。我在其中创建了一个子目录mygit.git。这就是我使用git init--bare创建远程存储库的地方。这将创建一个回购协议,而无需我可以直接推送的工作 这就是我工作的环境从Git开发到生产设置,git,repository,Git,Repository,我知道像这样的问题被问了很多。但是,我没有找到我问题的确切答案。我正在开始使用Git。我以前没有使用Git或任何类型的版本控制的经验。到目前为止,我已经能够在本地安装并运行它,没有任何问题。我可以通过终端使用Git,我还开始修补SourceTree应用程序 当我尝试远程设置时,我的问题就出现了。我在服务器上安装了Git。我已在远程暂存服务器上创建了一个存储库。我可以通过SourceTree推到它。但是,远程存储库似乎并没有连接到web根目录。我在本地对分支进行更改,提交、合并,然后推送到远程。但
Production (remote server)
^
Staging (remote server)
^
Development (local)
因此,我的问题是:
感谢您在这方面的帮助。光秃秃的git回购没有工作树(即没有文件)。
因此,您的web根不会因为推送到裸回购而改变 但是,您可以向该裸repo添加一个
post receive
hook,它将该裸repo的内容签出到您的web根目录,并更新其文件
有各种各样的例子说明了这种技术:例如,“VonC的答案是正确的。我发现这个链接除了VonC提供的链接。我将经历一个过程,我做了些什么,让事情沿着这个链接进行。我提供的链接中的信息最后更新于2010年11月17日,但仍然有效。这并不是详尽无遗的,因为我相信还有很多其他的方法可以把事情安排好。我没有太多服务器或Unix命令的经验,所以这个解释就是从这个角度出发的 重要的第一步是,您需要有到远程服务器的SSH连接来运行下面的命令,或者从服务器本身的命令行运行。我不会在这里讨论这个问题,因为这是一个单独的主题,我在网上找到了大量的资源来帮助解决这个问题 首先确保在本地计算机和远程服务器上安装了Git。大多数的操作指南都解释了这一点,而且很容易做到。是我为本地计算机下载安装程序的地方。此网站还提供了有关如何在远程服务器上安装的信息
#!/bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f
还有一件事需要注意。我在本地机器上使用运行MAMP的mac,远程服务器是Ubuntu Linux 10.04.1
步骤1-设置本地存储库
$ mkdir website.git && cd website.git
$ git init --bare
这可以通过多种方式实现。无论是通过命令行还是通过诸如SourceTree、Tower、GitX等Git应用程序。我使用了一个应用程序,因为这就是我计划使用Git的方式
步骤2-设置远程存储库
$ mkdir website.git && cd website.git
$ git init --bare
第1行-在远程计算机上创建一个目录并更改该目录
第2行-在website.git目录中创建裸存储库。请记住,website.git可以是任何扩展名为.git的名称。请参见VonC对裸存储库的描述
步骤3-这是给我带来最大麻烦的步骤
$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f
$ chmod +x hooks/post-receive
第1行-这只是创建一个目录,它将成为您的web根目录。如果已经为web服务器根目录设置了目录,则可能不需要执行此操作。如果您已经有一个web根集,请跳过此操作
第2-4行-这是我的第一个跨栏。此命令将显示接收后文件包含的内容。您可以通过ftp在远程服务器上传输到此文件,也可以通过命令行进行编辑。我最终只是在我的文本编辑器中编辑并通过ftp将其保存回服务器。对我来说容易多了。可以在步骤2中创建的目录website.git/hooks/post-receive.sample中找到此文件
您还会注意到文件的实际名称末尾有.sample。您需要重命名此文件,且不带扩展名。这将从本质上打开挂钩。新文件名应该是post-receive
打开该文件,您将发现以下文本
#!/bin/sh
#
# An example hook script for the "post-receive" event.
#
# The "post-receive" script is run after receive-pack has accepted a pack
# and the repository has been updated. It is passed arguments in through
# stdin in the form
# <oldrev> <newrev> <refname>
# For example:
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
#
# see contrib/hooks/ for a sample, or uncomment the next line and
# rename the file to "post-receive".
#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
第5行-这将确保接收后文件的文件权限在服务器上是可执行的。这是一个让我们确信的步骤,这样以后事情就不会破裂
步骤4-添加遥控器并推送本地主机
这一步可以通过命令行或我前面提到的一个Git应用程序来完成。我使用其中一个应用程序。对我来说,这更容易,就像我说的,我是服务器和unix命令的新手。好在你可以同时使用应用程序和命令行。所有内容都被记录到git存储库中,两者都将看到相同的内容。使用你最喜欢的东西。大多数人会告诉你学习一些基本的命令行知识,这不是一个坏主意
步骤5-在本地计算机上创建分支。
当您对更改感到满意时,将它们合并到主分支并将它们推送到远程分支。您的站点现在将被更新,并应反映您添加的任何新更改
就这样。这就是让我站起来跑步的原因。希望这会有所帮助,我写的东西不会有太多错误。我也很感兴趣。为使签出正确运行,必须设置GIT\u WORK\u TREE
。当我进行初次GIT推送时,收到一个错误“GIT deploy remote:fatal:您在一个尚未出生的分支上”。我修改了post-r