git svn dcommit始终失败,并且“无法拒绝使用脏索引”。

时间:2010-08-26 04:36:41

标签: git git-svn

$ git --version
git version 1.7.0.3

我克隆一个SVN存储库,然后进行提交:

$ git svn clone --stdlayout http://svn/example/project
$ echo test >> blah.txt
$ git commit -m "Something"

当我尝试dcommit回到SVN时,我收到以下错误:

$ git svn dcommit
Cannot dcommit with a dirty index.  Commit your changes first, or stash them with `git stash'.
 at .../git/1.7.0.3/.../libexec/git-core/git-svn line 497

..尽管分支似乎很干净:

$ git status
# On branch master
nothing to commit (working directory clean)

我唯一可以看到不存在的“非暂停更改”的地方是gitk,其中显示“本地未提交的更改,未签入索引”

运行git stash允许dcommit出于某种原因工作:

$ git stash
No local changes to save
$ git svn dcommit
Committing to http://svn/example/project ...
        M       blah.txt
Committed r65913
        M       blah.txt
r65913 = a5547d761108d233211f115429e23ddca73bf4bc (refs/remotes/trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk

我有一个别名来运行git stash; git svn dcommit; git stash apply - 但这不是最好的解决方法,因为它在实际使用存储时会导致合并错误

2 个答案:

答案 0 :(得分:3)

当我写这个问题时,我发现了以下提交:

http://repo.or.cz/w/git.git/commitdiff/181264ad590ffef9d956fdd023369869c2d0a55f

  

如果是,则dcommit命令失败   否则未经修改的文件已经存在   触及工作目录:

Cannot dcommit with a dirty index.  Commit your changes
first, or stash them with `git stash'.
     

这是因为“git diff-index”   报告索引之间的差异   和文件系统:

:100644 100644 d00491...... 000000...... M      file
     

修复是运行“git update-index    - 在“git diff-index”之前“刷新”,就像在git-rebase和   git-rebase - 在“git之前互动”   DIFF-文件”。

     

这会更改dcommit以显示列表   退出前修改过的文件。

     

还为“git”添加一个类似的测试用例   svn rebase“。

无法从git日志中解析更改的版本,但看起来更改应该在1.7.2.2

之后的版本中

编辑:截至2011年11月19日,提交仍然只在主分支中:

$ git branch --contains 181264ad590ffef9d956fdd023369869c2d0a55f
* master

Edit2:此更改现在位于git 1.7.3之后

> git tag --contains 181264ad590ffef9d956fdd023369869c2d0a55f | sort -V
v1.7.3
[...]

答案 1 :(得分:0)

我尝试执行git svn dcommit时收到了类似的错误。

我尝试从非root git文件夹(包含.git - 子文件夹)提交,并且我还没有检索到SVN repo中的更改,我还没有通过git svn rebase进行git。