繁体   English   中英

重命名文件夹后GIT SVN dcommit

[英]GIT SVN dcommit after folder rename

我无法找到类似的答案。

情况:

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


问题:

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


发行步骤(SVN存储库的根目录main.as中有一个文件)

  1. SVN存储库中的克隆分支(现在本地有一个文件)
  2. 本地提交到git(包括git add .
  3. 使用文件创建oldFolder
  4. 本地提交到git(包括git add .
  5. 提交到SVN
  6. 重命名 oldFolder-> newFolder (使用IDE或手动重命名-不是git-mv
  7. 本地提交到git(包括git-add .
  8. dcommit到SVN(不需要SVN变基,因为我是唯一提交SVN更改的人)

问题 :git-svn dcommit响应:

oldFolder/file.txt: needs update

update-index --refresh: command returned error: 1

我试过的

  • 隐藏,提交,dcommit,隐藏应用(同一件事:需要更新)
  • 隐藏,重新设置,隐藏应用,提交,dcommit (同一件事:需要更新)
  • 隐藏,重新设置,隐藏应用,提交,隐藏,dcommit (同一件事:需要更新)

半成品的那个叫:

svn rm -r oldFolder

但这以SVN中的oldFoldernewFolder结尾...而我希望重命名或删除oldFolder (在这种情况下,我不介意丢失历史记录)。

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


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

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

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

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

如果您的树仍在第7步,则可以执行

git reset --soft HEAD~

返回上一个提交并进行删除。

(仅出于完整性考虑而添加另一个答案)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM