$ 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
- 但这不是最好的解决方法,因为它在实际使用存储时会导致合并错误
答案 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。