gpt4 book ai didi

bash - Git 为单独文件夹中的每个分支获取工作树 - Bash

转载 作者:太空狗 更新时间:2023-10-29 14:31:19 25 4
gpt4 key购买 nike

我需要编写一个 bash 脚本,每小时将我们的存储库分支复制到我们本地的 linux 网络服务器上。

我们有一个 git 远程存储库 (gitolite),其分支名为 "master""testing""feature-featurename""hotfix-number"这些分支中的每一个都应该将其工作树复制到 /var/www/html/branchname

首先:如何将不同的工作树复制到不同的文件夹中?第二:如果“feature-”和“hotfix-”分支不断更改名称,我如何自动化此过程?

这与 git 钩子(Hook)无关,这应该是一个在不同服务器上运行的脚本,由 cron 作业触发。

最佳答案

可怕的几行:

mkdir -p /var/www/html
git clone --bare user@git-server:/your-repo.git && cd your-repo.git

git for-each-ref --format='%(refname)' refs/heads/ | grep 'branch-pattern' | while read branchRef; do
branchName=${branchRef#refs/heads/}
git archive --format=tar --prefix="$branchName/" "$branchRef" | tar -C/var/www/html -x
done

让我们分解一下:

  1. 确保目标目录存在。您可能不需要。
    mkdir -p /var/www/html

  2. 克隆git仓库并进入目录
    git clone --bare user@git-server:/your-repo.git

  3. 列出分支。这将从克隆目录运行。注意 git branch未使用,因为在脚本中使用时会产生令人惊讶的输出。
    git for-each-ref --format='%(refname)' refs/heads/

  4. 过滤您想要的分支。在您的情况下,模式可能类似于 grep -E "(master)|(testing)|(feature-.*)"
    grep 'branch-pattern'

  5. while 语句读取每个分支名称并将其分配给 branch 变量

  6. 创建一个 branchName 变量,它是不包括 ref 前缀的分支名称。请注意,这是特定于 bash 的。
  7. git archive 创建所选分支的 tar 归档,在所有条目前加上分支名称。存档被发送到标准输出
    git archive --format=tar --prefix="$branch/" "$branch"

  8. 立即将存档提取到目标位置
    tar -C/var/www/html -x

关于bash - Git 为单独文件夹中的每个分支获取工作树 - Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102041/

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