Git filter-branch commit-filter调试输出

时间:2015-06-10 21:59:11

标签: git git-filter-branch

我正在努力将存储库从cvs转换为git。由于cvs单独处理存储库子文件夹,因此多个存储库实际上依赖于主存储库中的某个子文件夹。

我发现我认为的确切答案是我需要的Rewrite history git filter-branch create / split into submodules / subprojects

不幸的是,当我尝试运行它时,我收到错误

git commit-tree: Syntax error: "(" unexpected
 could not write rewritten commit

我不知道如何调试此问题。我试图将变量回显到终端和文件,但没有看到任何创建。如何打印在过滤器定义内定义的变量(终端或文件)?

2 个答案:

答案 0 :(得分:2)

Git filter-branch commit-filter在./.git-rewrite下的临时目录中运行(除非-d选项将其指向别处)。脚本的输出应该是新提交的sha1,使其不适合调试消息。但是,您仍然可以将错误流用于此目的,例如:

echo $ my_var>& 2

提交过滤器未使用的错误流的>&2表达式redirects output

答案 1 :(得分:0)

实际上,filter-branch中的命令参数始终使用eval命令在shell上下文中进行求值,因此您可以在命令参数中添加“set -x”,然后在执行命令时将打印详细信息。例如:

git filter-branch --force --env-filter '
set -x
test="aaa"
echo $test
' --tag-name-filter cat -- --branches --tags

所以会打印如下信息:

Rewrite 91e9265bad17dfd71c335bbc4c1a0c422982fc50 (1/1) (1 seconds passed, remaining 0 predicted)    ++ test=aaa
++ echo aaa
aaa

FYI。