用前缀标记每个分支并删除分支

问题描述 投票:0回答:1

我意识到,不知何故,我和我的团队在一段时间后在一个存储库中收集了约 80 个陈旧分支。历史应该保留。

所以我想用前缀“archive/”标记每个分支。 但我很难让这一进展自动化。

我很难将标签名称(基于分支名称)与 git commit 哈希一起放入 git tag 命令中。 这就是我目前想到的:

git branch --remote | grep -vE "release|MLS|HEAD|main|master" | xargs -I{} git rev-parse {}  

所以现在我想将最右边命令的输出与第二个命令的输出一起引用。但我没有找到解决方案?知道怎么做吗?我的想法是这样的,其中是第二个命令的输出,但 origin/ 也必须删除。

git branch --remote | grep -vE "release|MLS|HEAD|main|master" | xargs -I{} git rev-parse {}  | xargs -I{} git tag archive/<branchname> {} | git push origin --delete <branchname>
git terminal xargs
1个回答
0
投票

您应该能够基于

origin/wat
创建标签并在单个命令中删除分支:
git push origin origin/wat:refs/tags/archive/wat :refs/heads/wat

如果您想一次对所有

origin/
分支执行此操作(除了您在代码片段中跳过的分支):

git branch -r | grep -Po '(?<=\sorigin/)\S+' | sort -u | grep -vE '^(release|MLS|HEAD|main|master)$' | sed 's~.*~origin/&:refs/tags/archive/&\n:refs/heads/&~' | xargs -d'\n' git push --dry-run origin

这是该命令的空运行版本,实际上并不执行标记/删除操作。
运行它以查看它产生的输出是否反映了您想要执行的操作。
如果是这样,请创建远程存储库的新克隆并将其保存在某处作为备份。
之后从命令中删除

--dry-run
参数并再次运行它以实际创建标签并删除分支。

© www.soinside.com 2019 - 2024. All rights reserved.