从Git开发到生产设置

从Git开发到生产设置,git,repository,Git,Repository,我知道像这样的问题被问了很多。但是,我没有找到我问题的确切答案。我正在开始使用Git。我以前没有使用Git或任何类型的版本控制的经验。到目前为止,我已经能够在本地安装并运行它,没有任何问题。我可以通过终端使用Git,我还开始修补SourceTree应用程序 当我尝试远程设置时,我的问题就出现了。我在服务器上安装了Git。我已在远程暂存服务器上创建了一个存储库。我可以通过SourceTree推到它。但是,远程存储库似乎并没有连接到web根目录。我在本地对分支进行更改,提交、合并,然后推送到远程。但

我知道像这样的问题被问了很多。但是,我没有找到我问题的确切答案。我正在开始使用Git。我以前没有使用Git或任何类型的版本控制的经验。到目前为止,我已经能够在本地安装并运行它,没有任何问题。我可以通过终端使用Git,我还开始修补SourceTree应用程序

当我尝试远程设置时,我的问题就出现了。我在服务器上安装了Git。我已在远程暂存服务器上创建了一个存储库。我可以通过SourceTree推到它。但是,远程存储库似乎并没有连接到web根目录。我在本地对分支进行更改,提交、合并,然后推送到远程。但是,这些更改不在通过临时服务器提供的页面上吗

在远程服务器上,我在web根目录之外创建了一个目录,用于保存存储库项目。我在其中创建了一个子目录mygit.git。这就是我使用git init--bare创建远程存储库的地方。这将创建一个回购协议,而无需我可以直接推送的工作

这就是我工作的环境

Production (remote server)
^
Staging (remote server)
^
Development (local)
因此,我的问题是:

  • 为什么web服务器不显示通过本地推送所做的更改
  • 我的生产服务器上是否也应该有一个存储库,以便所有的更改都可以使用
  • 我做错了吗

  • 感谢您在这方面的帮助。

    光秃秃的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