我使用 git-svn 作为 svn 客户端。我不时遇到以下问题。
我从本地 git 分支中的几个提交开始,一个空的阶段和一个干净的工作副本。
我在 Windows 命令行中键入“git svn rebase”以获取团队的修改并将我的提交放在他们之后以保持线性历史记录(这是使用 git-svn 所必需的)
一切顺利,团队的内容被获取,然后我的提交被重新设置,但是......
我最终在工作副本中进行了修改,并且在阶段中修改了文件,并且工作副本的修改与阶段中的修改完全相反。
我通常通过取消暂存阶段中的所有内容来解决此问题,这会恢复工作副本中的修改,这很好,但我真的很想了解这里发生了什么。
问题:这是一个错误,还是我不理解 git rebase 的问题?
注意:我后来在使用“git svn fetch”和“git rebase”时遇到了问题。
注意:我在具有大型 svn 存储库(10000+ 个文件,150000+ 个修订版)的 Windows 上使用 git,并且我还使用 git-extensions。编辑:我只使用它来探索存储库并提交。我从 Windows 命令行执行任何其他操作。
编辑:根据评论之一的要求,这里有两个屏幕截图可以帮助理解问题。第一个是工作副本的内容,第二个是阶段的内容。您可以很容易地看到两者是完全相反的:
工作副本:
阶段(还原工作副本修改,非常直观:相同的图像,红色和绿色交换):
编辑:我只是在一个非常简单的情况下重现了这个问题:我的提交只修改了一个文件,在“git svn rebase”期间获取的新提交很少,并且没有一个影响修改后的文件。我检查了“gitk --all”。它说的与 git-extensions 和“git status”完全相同。这是 gitk 的输出。我们从下往上看:
- 最后 3 行是变基时获取的 3 个提交。他们都没有碰我的文件。
- 顶部的第 3 行显示了我在 rebase 后的提交:一切都很好,它添加了应该添加的内容并删除了应该删除的内容。
- 第 2 行显示索引的内容:它包含恢复我的提交的修改
- 第一行显示了工作副本的内容:它包含与我的提交相同的修改,IE 恢复索引中的修改。
编辑:这是.git
发生问题的“git svn rebase”之后我的目录的内容:
17/02/2012 04:57 0 ArmuazEm5Z
05/04/2012 02:28 0 BeMzRLwWcu
06/11/2012 14:37 90 COMMIT_EDITMSG
01/11/2012 15:42 628 config
15/02/2012 04:21 73 description
16/02/2012 13:22 0 fuMhUevkYu
05/11/2012 15:53 1 703 279 gitk.cache
05/07/2012 03:49 0 gJfUbdRuG9
06/11/2012 14:42 23 HEAD
11/07/2012 03:14 <DIR> hooks
21/02/2012 03:22 0 II5HPacSJd
06/11/2012 14:42 5 439 960 index
15/10/2012 13:18 <DIR> info
16/02/2012 08:16 0 jerS1GtBYS
17/02/2012 04:57 0 Kg64sq9pzS
15/02/2012 23:36 0 lbe0yALJYy
15/10/2012 13:17 <DIR> logs
19/10/2012 16:58 <DIR> objects
06/11/2012 14:42 41 ORIG_HEAD
25/10/2012 11:02 2 795 packed-refs
05/07/2012 03:49 0 PpxYa5z0Hc
02/11/2012 10:00 <DIR> refs
15/02/2012 23:36 0 sm6ociDGGF
06/11/2012 14:42 <DIR> svn
21/02/2012 03:22 0 vEqtL0Yiqd
05/04/2012 02:28 0 VFwn3laTEV
16/02/2012 13:22 0 XYoiLqY5BM
16/02/2012 08:16 0 z9vL8lRT7t
22 File(s) 7 146 889 bytes
6 Dir(s) 54 105 219 072 bytes free
编辑:如果您有兴趣跟踪此问题,我在 git@vger.kernel.org 邮件列表上报告了一个错误,主题为“[git-svn] [错误报告] git svn rebase 后索引处于奇怪状态”。