git svn移动目录

时间:2012-09-16 07:29:53

标签: git svn git-svn

我正在使用git进行localy,而我们的远程服务器是svn。 我不得不在工作副本中移动许多文件和文件夹。 我做了什么:

  1. git mv SRC_FOLDER DST_FOLDER
  2. git svn dcommit
  3. 现在,SVN存储库包含具有所有旧历史记录的新文件。 但是,由于git不跟踪空目录,并且因为我没有使用git svn dcommit --rmdir,所以所有旧目录在svn reposirtoy中都是空的,并且新目录不包含旧历史记录。

    在提交更改后,有没有办法将旧目录历史记录移动到新目录历史记录。

2 个答案:

答案 0 :(得分:0)

您是否可以将所有单个文件和子目录移回原始目录(包含历史记录),删除新的(无历史记录)目录,然后从SVN工作副本中重新命名?

答案 1 :(得分:0)

我可以用两个工具告诉你如何做到这一点:SmartGit(客户端)和SubGit(服务器端,这里你需要新的克隆的纯Git存储库链接到你的Subversion)。 git-svn不支持目录移动。

如果大多数文件已移动到同一目录中,则两者都支持目录移动检测。最初你可以移动文件并使用任何工具推送。

步骤1(选项1)。您应该通过替换恢复当前提交(确保您没有本地更改):

$ git update-ref my_current_branch <commit_id_before_move>
$ git reset --hard HEAD

步骤1(选项2)。 ...或通过反向合并+提交特定提交(然后不执行分支替换)

$ git revert <commit_with_wrong_move>

第2步(选项1)。现在您应该重新应用您的更改: 移动目录

$ git mv SRC_FOLDER DST_FOLDER

第2步(选项2)。 ...或者只是樱桃 - 再次选择你的更改:

$ git cherry-pick <commit_with_wrong_move>

步骤3.然后推送您的更改:

对于SubGit: 用于分支替换(即步骤1选项1):

$ git push -f

用于简单恢复(即步骤1选项2):

$ git push

对于SmartGit 按“按下”按钮(如果需要强制按下,它会询问)

看起来很奇怪只是撤消+重做可能会有所帮助,但主要操作(目录移动)是在推送级别执行的(当启动到SVN的转换时),你应该使用正确的工具来执行它。