3

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

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

在遥控器上,我在我的 Web 根目录之外创建了一个目录来保存存储库项目。我在其中创建了一个名为 mygit.git 的子目录。这是我使用 git init --bare 创建远程存储库的地方。这应该创建一个没有直接工作的回购,我可以推送。

这是我正在使用的环境

Production (remote server)
^
Staging (remote server)
^
Development (local)

所以,我的问题是:

  1. 为什么 Web 服务器不显示通过本地推送所做的更改
  2. 我是否应该在我的生产服务器上也有存储库,以便所有更改都会冒泡?
  3. 我做这一切都错了吗?

感谢您对此的任何帮助。

4

2 回答 2

2

A bare git repo has no working tree (ie no files).
So your web root won't be changed by a push to a bare repo.

However, you can add to that bare repo a post-receive hook which will checkout the content of that bare repo to your web root, updating its file.

There are various examples illustrating that technique: for instance "git GIT_WORK_TREE post-receive hook deployment remote".

于 2012-09-19T06:30:38.980 回答
2

VonC 的回答是正确的。除了 VonC 提供的链接之外,我还发现了这个链接http://toroid.org/ams/git-website-howto 。我将简单介绍一下我所做的工作,以使事情与此链接一起工作。我提供的链接中的信息最后一次更新是 2010 年 11 月 17 日,但它仍然有效。这绝不是详尽无遗的,因为我确信还有许多其他方法可以进行设置。我没有很多服务器或 Unix 命令经验,所以这个解释是从这个角度来的。

重要的第一步是您需要与远程服务器建立 SSH 连接以运行以下命令或从服务器本身的命令行运行。我不会在这里讨论它,因为它是单独的主题,我在网上找到了许多资源来帮助解决这个问题。

首先确保在本地机器和远程服务器上安装了 Git。那里的大多数操作方法都解释了这一点,并且很容易完成。http://www.git-scm.com是我为本地机器下载安装程序的地方。该站点还包含有关如何在远程服务器上安装的信息。

还有一件事要注意。我正在为我的本地机器使用运行 MAMP 的 mac,而我的远程服务器是 Ubuntu Linux 10.04.1。

第 1 步 - 设置本地存储库

这可以通过多种方式完成。通过命令行或通过诸如 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 行 - 这是我的第一个障碍。此命令将向您显示文件 post-recieve 包含的内容。您可以 ftp 到远程服务器上的此文件或从命令行编辑。我最终只是在我的文本编辑器中编辑并通过 ftp 将其保存回服务器。对我来说更容易。该文件可以在您在步骤 2 中创建的目录 website.git/hooks/post-receeive.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

这些行已被注释掉,因此它们不会伤害任何东西。您可以删除这些行或离开并在注释行下方添加以下内容。完成后将文件保存回远程服务器。

#!/bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f

第 5 行 - 这将确保接收后文件的文件权限在服务器上是可执行的。这是一个让我们确定的步骤,这样事情就不会在以后中断。

第 4 步 - 添加远程并推送本地主机

这一步可以通过命令行或我之前提到的 Git 应用程序之一来完成。我使用其中一个应用程序。对我来说,这更容易,就像我说的那样,我是服务器和 unix 命令的新手。好处是您可以同时使用应用程序和命令行。一切都记录到 git 存储库中,两者都会看到相同的内容。使用你最舒服的任何东西。大多数人会告诉您学习一些基本的命令行内容,这不是一个坏主意。

第 5 步 - 在本地计算机上创建分支。

当您对更改感到满意时,将它们合并到您的主分支并将它们推送到您的远程。您的网站现在将更新,并且应该反映您添加的任何新更改。

而已。这就是让我启动并运行的原因。希望这会有所帮助,并且我所写的内容没有太多错误。

于 2012-09-19T15:44:32.270 回答