gpt4 book ai didi

tags - git-svn:自动将 svn 修订导入/创建为 git 标签

转载 作者:行者123 更新时间:2023-12-01 05:16:21 35 4
gpt4 key购买 nike

我正在使用 git-svn 来处理 svn 存储库。 git master分支正在镜像 svn trunk分支(唯一使用的 svn 分支),即主分支和主干分支上的元素之间存在一对一的关系。

我想要有对应于 svn 修订版的 git 标签,这样我就可以做类似 git diff r123 workbranch 之类的事情。看看我与 svn 修订版 123 相比做了什么。

当我这样做时,修订没有被标记 git svn rebase ,所以我创建了以下脚本,我在 svn rebase 后运行:

#!/usr/bin/perl 

use strict;
use warnings;

open(PIPE, "git log master |");
# Format for the pipe output:
# ...
# commit 6b24b8fdc6a25d35b01140dc1ac054697133423d
# ...
# git-svn-id: https://server.example.com/svn/project/trunk@594 164096ca-3471-41d1-a9ce-9541462a8c31
# ...
my $commit = "";
my $i = 0;
foreach my $line (<PIPE>) {
if ($line =~ /^commit ([\da-f]+)/) {
$commit = $1;
next;
}
next unless $line =~ /^\s+git-svn-id: .*\/trunk\@(\d+) /;
my $git_svn_id = $1;
run("git", "tag", "-f", "r$git_svn_id", $commit);
last if $i++ == 20;
}
close(PIPE);

sub run {
print join(' ', @_), "\n";
return system(@_);
}

这个脚本完成了工作,但我每次都必须手动运行它,而且我(任意地)限制了它检查最后 21 个修订版,所以理论上存在遗漏某些修订版的风险(但我会从打印)。

问题:有什么方法可以自动执行此操作,以便我只运行 git svn rebase并且所有导入的修订都将在 git 中标记?任何hooks我可以用吗?

附言是的,我知道 svn find-rev,但我绝对不想编写像 git diff $(git svn find-rev r123) $(git svn find-rev r124) 这样复杂的命令。而不仅仅是 git diff r123 r124 .

最佳答案

这是一个疯狂的想法:捕获 bash 命令并自动用 SHA 哈希替换任何 r1234 字符串:

shopt -s extdebug

enhance_rev_parse () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
case "$BASH_COMMAND" in
*r[0-9]*)
eval $(echo "$BASH_COMMAND" | sed -e 's/r[0-9][0-9]*/$(git svn find-rev &)/g')
return 1
;;
esac
}

trap 'enhance_rev_parse' DEBUG

关于tags - git-svn:自动将 svn 修订导入/创建为 git 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740165/

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