如何解决filter-branch删除多余的目录
| 我正在将几个Subversion存储库迁移到Git,但它们的设置有点怪异:标准的主干/分支/标签结构位于该存储库的多个子目录中。 / branches和/ tags都是空的,因此git-svn导入仅以主干目录结尾。svn/
proj1/
trunk/
src/
proj2/
trunk/
src/
我想使用ѭ1删除多余的中继文件夹,但其余部分保持不变:
svn/
proj1/
src/
proj2/
src/
根据文档中的最后一个示例,这是我到目前为止的内容:
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
在我看来,ѭ4正在完成其工作,如下所示:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/trunk/src/file1.txt
产生以下输出:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/src/file1.txt
但是,当我运行整个命令时,出现以下错误:
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/-/-\" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \\
git update-index --index-info &&
mv \"$GIT_INDEX_FILE.new\" \"$GIT_INDEX_FILE\"
有任何想法吗?我在Windows上使用的是git版本1.7.3.1.msysgit.0。
更新:现在使用git版本1.9.0.msysgit.0,类似的情况会产生不同的错误(注意在执行命令之前before8ѭ不存在):
rm: cannot remove `c:/Path/to/svn/.git-rewrite/revs\': Permission denied
rm: cannot remove directory `c:/Path/to/svn/.git-rewrite\': Directory not empty
最终,相同的解决方案起作用。
解决方法
根据此处的注释找出答案。 git-svn如何表示\“ empty \”(仅目录)提交似乎是一个问题。如果我从正常提交开始就可以正常工作:
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\"\' 83df928c..HEAD
,嗯我看不到您所运行的内容有什么问题,它在示例存储库中对我来说很好用:
$ git init
在/Users/bcampbel/tmp/git-subdir/.git/中初始化了空的Git存储库
$ mkdir -p proj1 / trunk
$ echo \“ hello \”> proj1 / trunk / test.txt
$ git添加。
$ git commit -m \“初始提交\”
[master(root-commit)cd431f3]初始提交
更改1个文件,1个插入(+),0个删除(-)
创建模式100644 proj1 / trunk / test.txt
$ echo \“ foo \”> proj1 / trunk / another.txt
$ git添加。
$ git commit -m \“添加文件\”
[master 84139f2]添加文件
更改1个文件,1个插入(+),0个删除(-)
创建模式100644 proj1 / trunk / another.txt
$ 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
重写84139f26c7921721190b3c5dd57e2b49a41034aa(2/2)
Ref \'refs / heads / master \'被重写
$ ls proj1 /
another.txt test.txt
似乎由于某种原因,index.new
文件未在系统上写出,或者ѭ12by命令无法读取。我不确定为什么会这样,但是我想知道是否可能是由于您在Windows上使用了msysgit。您是否有可以试用的Linux盒子或Mac?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。