gpt4 book ai didi

git - 如何使用 Git 部署项目

转载 作者:太空狗 更新时间:2023-10-29 13:38:11 25 4
gpt4 key购买 nike

我想出了一个解决方案,但我觉得必须有一种更简单的部署方式,使用 Git。解决方法是

  1. 在本地使用 Git 开发应用
  2. 设置 Git 服务器
    • 在本地克隆本地存储库作为裸存储库
    • 将裸仓库复制到远程服务器
    • 将裸仓库设置为远程仓库
  3. 从裸仓库克隆一个仓库到服务器(以便有一个带有工作目录的仓库)
  4. 通过推送本地提交的更改来更新裸存储库。
  5. 通过从裸仓库中提取更改来更新工作目录

这不是一个简单的解决方案,可能有更好的方法使用 Git 进行部署。我尝试在服务器上单独使用裸存储库,并将 git 配置文件中的工作树变量设置为另一个目录,但它没有用:在第一次 checkout 后,当我更新裸存储库并尝试检查更改,似乎一切正常,但工作目录中什么也没发生。然后我决定克隆裸仓库,所以克隆的仓库有一个工作目录,并且可以通过 git pull 更新它(这会从裸仓库 pull 更改作为其原始远程仓库)。

此解决方案的一大优点是您也可以在服务器上修复代码,提交这些更改,更新裸仓库,然后您可以简单地更新本地仓库。另一个优点是您可以从裸仓库克隆项目,如果他们可以访问服务器,更多的参与者可以参与开发。

你知道有以上优点的更简单的方法吗?

最佳答案

我将向您描述我为实现该目标所做的工作,因此它可能对您有用。我还将提供一些详细信息,以便将来可以为新用户提供帮助。

我有一台服务器,我喜欢在其中运行一些个人实验,并且我使用 git 以我发现的最简单的方式进行部署。它是使用 git 附带的钩子(Hook)和非常少的 shell 脚本完成的。

我们开始了:

首先:在服务器中初始化一个裸仓库。与普通 git 存储库的区别在于缺少工作树(项目文件和常用内容)。您只有存储库树。

git init --bare 

如果你看一下裸结构,你会看到这样的东西:

› git init --bare
Initialized empty Git repository in /home/git/mysite/
› ls
branches config description HEAD hooks info objects refs

如果仔细查看hooks 文件夹,您会发现一些有趣的东西:

daniel at heavens-empire into /home/git/mysite/hooks  
› ls
applypatch-msg.sample post-update.sample pre-commit.sample
pre-push.sample update.sample commit-msg.sample
pre-applypatch.sample prepare-commit-msg.sample pre-rebase.sample

这些文件中的每一个都是可以在某些事件后触发的脚本示例。今天我们看的是post-receive事件(这个版本没有。。不知道为什么)。当我们推送到那个裸仓库时,它就会发生。您可以创建它并在其中添加一些 shell 美感:

#shows file content
daniel at heavens-empire into /home/git/mysite/hooks$ cat post-receive

#!/bin/sh

GIT_WORK_TREE=/home/www/site git checkout -f

GIT_WORK_TREE 将确定我推送的工作树文件的位置。这就像你在一个文件夹中有 repo,但说树在另一个文件夹中。

我已经从我的玩具服务器复制了这些脚本,所以我可能会说它们应该与您一起工作,更改适当的工作树变量。

在我的本地存储库中,我只是将那个裸文件夹添加为远程存储库。我将使用 ssh 使事情变得简单。在这种情况下,请确保您用来访问的用户对工作树文件夹具有适当的权限:

git remote add mygitserver daniel@heavensempire.com:/home/git/mysite

每次您进行推送时,您的本地 git 都会发送提交。当服务器 git repo 接收并接受它们时,它将触发该接收后脚本。设置工作树并授予权限后,它将对应用程序应该运行的文件夹进行简单的检查。

我希望这对您有用,也可能对其他人有用。我个人避免在服务器上编辑内容。如果您发现在服务器中反射(reflect)一个完整的 repo 很有用,您还可以使用 post-receive 进行克隆/推送,并在另一个 repo 中为您 checkout 。像这样的东西:

cd /home/mysite
git pull repo/folder masterOrOther

关于git - 如何使用 Git 部署项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24460757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com