如何在一组Git补丁中修改文件路径?

mip*_*adi 14 git

我正在开发一个Git仓库,它是从SVN仓库中撤出的git svn.许多月前,SVN repo是从原始(上游)项目的源tarball创建的.原始项目具有如下文件结构:

/
  COPYING
  README
  src/
      ...many source files...
Run Code Online (Sandbox Code Playgroud)

然而,当创建SVN repo时,README文件等被剥离,并且应用程序是以src/root身份创建的,因此repo现在看起来像:

/
  ...many source files
Run Code Online (Sandbox Code Playgroud)

我最近将这个SVN repo转换为Git仓库.原始项目也在Git仓库中,我想开始跟踪上游更改,以便我可以轻松查看已进行的自定义更改(并将修补程序提交回原始项目,如果适用).我在上游回购中找到了我们的SVN repo创建的提交,所以现在我想将我们的更改应用于该提交(在分支中).我可以轻松地创建一组补丁git format-patch并将其应用于克隆的上游repo ...除了文件结构不同,因此补丁不再指向正确的文件.有没有办法将补丁应用git format-patchsrc/克隆回购中的目录?(请注意,Git补丁也有必要的信息,如原作者姓名,电子邮件和日期,我也想申请,而不是手工完成,即乱搞GIT_AUTHOR_EMAIL等)

Dan*_*ing 6

在我看来,你应该可以git filter-branch用来改变先前克隆的SVN仓库中的路径.然后,在更新了所有文件路径之后,您现在可以使用git format-patch创建应用于新克隆的上游存储库的修补程序.

尝试:

git filter-branch --tree-filter 'mkdir src; git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files src'