gpt4 book ai didi

git - 如何在推送时自动 checkout ?

转载 作者:太空狗 更新时间:2023-10-29 14:08:34 26 4
gpt4 key购买 nike

考虑以下情况:

我有一个 git 存储库 foo.git,其中包含一个 javascript 项目的代码。在这个存储库中有一个分支 production,它包含由从 /var/www/foo 获取代码的网络服务器提供的代码状态。此存储库是项目的主存储库。每个人都对它推 pull 。

每当有人推送到那个特定分支时,是否可以将 /var/www/foo 更新为 production 的 checkout ?您可以假设 git 守护进程(或用户 git,即所有人登录以通过 SSH 连接的用户)有权写入所述目录。

最佳答案

您必须使用 git init --bare 在服务器上创建一个裸存储库。然后使用 post-receive Hook 来触发您的部署。如何部署取决于您。

我的部署策略

我通常会在合乎逻辑的地方放置一个deploy 目录。然后每次 checkout 时,我都会将最新的分支解压缩到 deploy/COMMIT_ID,其中 COMMIT_ID 是最新推送的哈希值。 checkout 完成后,您可以将符号链接(symbolic link)重新指向最新的部署目录。

我常用的目录结构:

deploy.git/
deploy/
a7922231/
b2f0a2af/
latest -> b2f0a2af

解压更新

我通常不使用 git-checkout,而是使用 git-archive 将分支解压到目录中。

# Assuming current directory is deploy.git
HEAD=`cat refs/heads/master`
mkdir -p ../deploy/${HEAD}
git archive master | tar -x -C ../deploy/${HEAD}

您的网络服务器可以指向 deploy/latest,更新将或多或少是原子的。

我经常在生产中使用它,与在同一目录上解包相比有一些好处。

  1. 回滚很容易
  2. 您可以在不中断当前部署的情况下执行解压后程序,例如编译或安装依赖项

提示

  1. 每次更新,附加到一个部署日志,说明更新发生的时间,以及它们的哈希 ID 是什么。这使得回滚变得容易得多。

关于git - 如何在推送时自动 checkout ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667128/

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