在SVN到Git Migration之后重命名trunk文件夹

时间:2016-05-12 13:31:55

标签: git svn git-svn trunk

我有一些项目,我从SVN迁移到Git。

但是,当我浏览文件夹结构时,我仍然会在每个项目中看到trunk文件夹。有没有办法快速自动删除?

这是我的svn文件夹结构,请注意,存储库本身没有trunk,但项目有:

--MyRepository
  --Project1
    --trunk
      -- files
  --Project2
    --trunk
      -- files
  --Project3
    --trunk
      -- files
  --Project4
    --trunk
      -- files
  --Project5
    --trunk
      -- files
  -- ..

这就是我想要的Git存储库:

--MyRepository
  --Project1
    -- files
  --Project2
    -- files
  -- ..

提前致谢。

PS:我以为我可以分享用于迁移的命令。在那里:

mkdir gitRepo && cd gitRepo
git svn init http://bla/svn/myRepo --no-metadata
git config svn.authorsfile ../authors.txt
git svn fetch

3 个答案:

答案 0 :(得分:1)

如果您正确迁移,则它应该不是trunk文件夹。请参阅--stdlayout的{​​{1}}。所以,你有三个选择:

  1. 正确重做迁移(最简单,但会影响git repo用户,如果 有)。
  2. 使用git svn或类似的东西重新刻录git历史记录(应该比第一个快,并且不需要原始的svn repos,但会影响git repo用户(如果有的话)。
  3. 只需移动文件夹并提交(最简单,最安全,但行李箱文件夹将永久保留在历史记录中)。
  4. 如何正确迁移回购。据我所知,你有一个像这样的svn repo结构:

    filter-branch

    因此,您应该进行两次迁移,为每个项目创建两个git存储库:

    /
    /projectA
    /projectA/trunk
    /projectA/branches/...
    /projectB
    /projectB/trunk
    /projectB/branches/...
    

    事情是 - svn对主干和分支没有任何想法,所有它理解的是一个文件夹。当你迁移到git时,你应该知道你的svn repo结构,并相应地将文件夹映射到分支。

答案 1 :(得分:1)

所以,就在这里。

执行魔术的命令是:

git filter-branch -f --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"' af117ec86a30ba6676571cd1f73083c5cfbec0bd..HEAD

请注意..HEAD之前的提交标记,该标记应该是您应输入的第二个或第三个最早的提交标记。如果输入第一个,则会出错。

要找出最早提交的提交标记,只需使用:

git log

并尽可能向下滚动,在那里你会看到最早的提交。拿第二或第三。它已经完成了。

答案 2 :(得分:-1)

不,您应该首先根据需要构建文件夹根目录,然后映射根目录。一种正确的做法。