我正在将几个Subversion存储库迁移到Git,但它们设置有点奇怪:标准的trunk/branches/tags结构存在于存储库的几个子目录中./ branches和/ tags都是空的,因此git-svn导入最终只有trunk目录.
svn/
proj1/
trunk/
src/
proj2/
trunk/
src/
Run Code Online (Sandbox Code Playgroud)
我想git filter-branch用来删除额外的trunk文件夹,但保持其余部分完整:
svn/
proj1/
src/
proj2/
src/
Run Code Online (Sandbox Code Playgroud)
git filter-branch --index-filter \
'git ls-files -s | sed "s-/trunk/-/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
Run Code Online (Sandbox Code Playgroud)
在我看来,它sed正在做它的工作,因为这个输入:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/trunk/src/file1.txt
Run Code Online (Sandbox Code Playgroud)
生成此输出:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/src/file1.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我运行整个命令时,我收到以下错误:
Rewrite e00c119cfb755f741dc0e17c36d36bc2ddd27562 (1/42)mv: cannot stat `/c/dev/R
epo/.git-rewrite/t/../index.new': No such file or directory
index filter failed: git ls-files -s | sed "s-/trunk/-/-" | …Run Code Online (Sandbox Code Playgroud)