git - 使用 git-svn 移动/重命名目录

标签 git svn git-svn

我的公司使用 SVN 存储库,但我想使用 Git。目前我正在使用 git-svn,但是当我在 Git 中移动或重命名包含多个文件的目录并“git svn dcommit”这样的更改时,在 SVN 存储库中,这会导致单个文件移动:

Changed paths:
  D /directory/file1
  D /directory/file2
  D /directory/file3
  D /directory/file4
  ...
  A /renamedDirectory
  A /renamedDirectory/file1 (from /directory/file1:67918)
  A /renamedDirectory/file2 (from /directory/file2:67918)
  A /renamedDirectory/file3 (from /directory/file3:67918)
  A /renamedDirectory/file4 (from /directory/file4:67918)
  ....

相反,我希望看到类似的东西:

Changed paths:
  D /directory
  A /renamedDirectory (from /directory:67918)

即完整目录重命名。有什么办法可以解决这个问题吗?

最佳答案

在 git 中重命名(移动)目录时,git 仅移动文件,而不是目录。

如果我将名为 pdfs 的文件夹重命名为 pdfs2

$ git mv pdfs pdfs2

$ git status

renamed:    pdfs/filea -> pdfs2/filea
renamed:    pdfs/fileb -> pdfs2/fileb

所以我认为 git 是这样工作的,所以 git-svn 也是这样工作的。

git 没有办法说“我 100% 确定这是一个完整的目录移动操作”,因此无法将其转换为 SVN 作为目录移动。 Git 只知道/关心文件。


另外:你会注意到,如果你尝试提交一个空目录,git 会提示:

$ mkdir afolder
$ git add afolder && git commit -m "Added afolder"
On branch master
nothing to commit, working tree clean

这又是因为 git 不关心目录,只关心文件。

关于git - 使用 git-svn 移动/重命名目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313692/

相关文章:

git - 如何将非标准 svn 存储库克隆到 git?

git-svn - 使用 git-svn 时,.gitignore 中的条目是否会应用于 SVN 存储库?

git - 如何使用 git 部署的 Windows Azure 网站呈现内部版本号/哈希?

java - 将本地 Java 项目 merge 到现有 git 存储库

svn - 如何从热 (WiX) 收获中排除 SVN 文件?

git-svn - 删除 svn Remote 后,从 git 存储库中删除 svn 标签/分支

git - ssh-keygen' 未被识别为内部或外部命令

git 从两个分支之间的差异创建提交

svn - 处理重命名 : svn vs. git 与 mercurial

svn - .svn 目录可访问