文件夹重命名后,GIT SVN dcommit

时间:2011-10-12 16:13:07

标签: git repository directory git-svn dcommit

我无法找到与我的问题相似的答案。

情况:

本地使用GIT(git版本1.7.3.1.msysgit.0)
远程存储库是SVN(不确定版本)


问题:

克隆SVN仓库,添加文件夹,将其提交给git和SVN,重命名文件夹(不告诉git),提交git,不能再提交给SVN。


问题步骤 (SVN repo在根文件夹中有一个文件main.as)

    来自SVN repo的
  1. 克隆分支(现在本地有一个文件)
  2. 提交到本地git(包括git add .
  3. 使用其中的文件创建 oldFolder
  4. 提交到本地git(包括git add .
  5. dcommit 到SVN
  6. 重命名 oldFolder - > newFolder (使用IDE重命名或手动重命名 - 不是git-mv
  7. 提交到本地git(包括git-add .
  8. dcommit 到SVN(不需要SVN rebase,因为我是唯一一个提交SVN更改的人)
  9. 问题:git-svn dcommit响应:

    oldFolder/file.txt: needs update
    
    update-index --refresh: command returned error: 1
    

    我尝试了什么:

    • stash,commit,dcommit,stash apply (同样的事情:需要更新)
    • stash,rebase,stash apply,commit,dcommit (同样的事情:需要 更新)
    • stash,rebase,stash apply,commit,stash,dcommit (同样的事情:需要更新)

    半工作的人打电话:

    svn rm -r oldFolder
    

    但最终在SVN中出现了oldFoldernewFolder ...而我想要oldFolder重命名或删除(我不介意在这种情况下丢失历史记录) )。

    我需要SVN repo来反映我当地的git master / branch ......


    为什么我在没有git命令的情况下重命名文件?
    我使用大型文件结构和我用来重构旧代码的IDE重命名导致上述场景的多个文件夹和文件。我无法跟踪并在每个删除的文件夹上调用git rm。

2 个答案:

答案 0 :(得分:1)

在步骤7,您暂停添加新文件(newFolder / file.txt),但不删除旧文件。您需要执行以下操作,而不是上面的步骤6和7:

  1. 重命名oldFolder - > newFolder(使用IDE重命名或手动重命名 - 而不是git-mv)
  2. git add newFolder
  3. git rm -r oldFolder
  4. 本地提交
  5. 此时,git将跟踪重命名(如果有的话),并为SVN生成正确的提交。

    如果你的树仍然在第7步,你可以

    git reset --soft HEAD~
    

    返回上一次提交并暂停删除。

答案 1 :(得分:0)

(仅为了完整性而添加另一个答案)

git add --all添加所有修改,包括删除和重命名。

因此,即使在文件夹重命名的情况下,以下命令序列通常也“正常”:

git add --all
git commit -m "some msg"
git svn dcommit

我们并不需要git rm -r OLD_FOLDER(当然,除非我们想要微调Git索引定义)。