gpt4 book ai didi

git - 循环通过带有子模块的几个分支以实现只读目的

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

我有一个应用程序需要每 15 分钟对 git 存储库中的文件结构进行一次快照。 repo 协议(protocol)很大,所以我不想拥有它的多个副本。 repo 协议(protocol)包含几个我感兴趣的分支,每个分支都包含相当多的子模块。

我需要的是一系列 git 命令,它们可以让我切换到一个分支并获得正确的文件结构,以便我可以读取它。然后切换到另一个分支并执行相同的操作。

到目前为止,我尝试过的所有内容似乎都会在某个时候刹车(有时会运行好几天直到它坏掉)。我只是无法获得正确的命令来处理对分支或子模块的任何类型的远程更新。

到目前为止,我已经尝试了很多命令序列,其中许多可能是完全错误的。我不太习惯处理庞大而复杂的 repo 协议(protocol)。

我目前使用的那个(从各种堆栈溢出线程中收集的):

git checkout [branchname]
git fetch
git reset --hard #Feels weird to do but helped at some point
git pull
git submodule update --init --recursive
<take snapshot>
git clean -d -f -f
<restart chain with new branchname>

我通常遇到的错误类型是由于跟踪或未跟踪的文件发生更改而无法 checkout 分支。

编辑:澄清一些事情:

我没有对存储库进行任何更改,所以我只想强制 checkout ,不保存任何内容。

有 gitignore 文件,但因为我只是 pull 和阅读这些文件应该无关紧要吧?

关于子模块,正如我所说,我对它们不太了解,所以我不能 100% 回答您提出的这些问题,但我希望拥有的行为与“git submodule update --init”相同--recursive' 在 repo 的所需分支中执行时会给我。

最后,该存储库包含数百个分支,我只想检查其中的五个分支。

最佳答案

这对我来说很简单。

以空格分隔的分支名称将所需的分支作为一个字符串提供。

#!/bin/bash

#set -x # enable this to see the executed commands, e.g. for debugging

ORIG_BRANCH=`git rev-parse --abbrev-ref HEAD`
BRANCHES=$1

for B in $BRANCHES; do
git reset
git clean -dfx # x makes it ignore the .gitignore rules
git checkout $B
git pull

git submodule update --init --recursive
git submodule foreach --recursive git reset --hard
git submodule foreach --recursive git clean -dfx

echo "Taking snapshot of branch $B"
#<take snapshot>
done

# restore the original state
git checkout $ORIG_BRANCH
git pull
git submodule update --init --recursive

试一试,然后告诉我你的具体情况如何

关于git - 循环通过带有子模块的几个分支以实现只读目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39099856/

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