2

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

情况:

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


问题:

克隆一个 SVN 存储库,添加一个文件夹,将其提交到 git 和 SVN,重命名文件夹(不告诉 git),提交到 git,不能再提交到 SVN。


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

  1. 从 SVN repo克隆分支(现在在本地有一个文件)
  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 进行更改的人)

问题: 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 结束......而我想oldFolder被重命名或删除(在这种情况下我不介意丢失历史记录)。newFolderoldFolder

我需要 SVN 存储库来反映我本地的 git master/branch ...


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

4

2 回答 2

2

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

  1. 重命名 oldFolder -> newFolder(使用 IDE 或手动重命名 - 不是 git-mv)
  2. git 添加新文件夹
  3. git rm -r 旧文件夹
  4. 本地提交

此时,git 将跟踪重命名(如果有),并为 SVN 生成正确的提交。

如果你的树还在第 7 步,你可以这样做

git reset --soft HEAD~

返回到上一个提交并暂存删除。

于 2011-12-01T21:13:50.630 回答
0

(为了完整起见,添加另一个答案)

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

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

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

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

于 2014-01-29T17:30:50.940 回答