Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git mv和Eclipse中的重构_Eclipse_Git_Refactoring - Fatal编程技术网

git mv和Eclipse中的重构

git mv和Eclipse中的重构,eclipse,git,refactoring,Eclipse,Git,Refactoring,我如何解决这种“鸡和蛋”的局面 我决定在Eclipse中重命名一个Java类(比如从one.Java到two.Java)。Eclipse重构让我可以毫不费力地做到这一点 然后,我转到git并键入: git mv myproj/src/com/ate/lib/one.java myproj/src/com/ate/lib/two.java 并收到错误信息: fatal: bad source, source=myproj/src/com/ate/lib/one.java, destination

我如何解决这种“鸡和蛋”的局面

我决定在Eclipse中重命名一个Java类(比如从
one.Java
two.Java
)。Eclipse重构让我可以毫不费力地做到这一点

然后,我转到git并键入:

git mv myproj/src/com/ate/lib/one.java myproj/src/com/ate/lib/two.java
并收到错误信息:

fatal: bad source, source=myproj/src/com/ate/lib/one.java, destination=myproj/src/com/ate/lib/two.java
我理解为什么会发生这种情况,但是如果我在重构之前做了
gitmv
,Eclipse将不会像这样


解决这个问题的好方法是什么?

gitmv
只是一种方便的方法。(也就是说,它可以检测到它们,但它们不会被记录为像添加或删除这样的操作)。要准备并提交重构,请执行以下操作:

git rm myproj/src/com/ate/lib/one.java
git add myproj/src/com/ate/lib/two.java
git commit
git-rm
告诉git分期删除索引中的文件。尽管您已经在工作目录中“删除”了该文件(通过移动它),但您并没有告诉git您想要对该删除进行版本设置。
rm
git-rm
之间的区别在于,第一个对工作目录起作用,第二个对索引也起作用(更改为由git进行版本控制)

git add
只需在新位置添加文件内容

编辑:


我以前有
git-rm--cached
,这是出于个人习惯,但显然
git-rm
不会抱怨工作目录中不存在该文件
git-rm--cached
在版本控制中要删除文件时仍然有用,但要将文件保留在工作目录中。

实际上,您不需要
--cached
,如果文件不在工作树中,
git-rm
不会抱怨。@shelhamer谢谢。我理解
git add
部分,但是当
git status
已报告
已删除时,为什么我需要运行
git rm
:myproj/src/com/ate/lib/one.java
?@Mark Longair,谢谢你的提示!我想我已经习惯了使用--cached,所以请自动将其放入其中。@ateiob,请参阅我的更新答案
git rm
告诉git您要删除该文件
git status
报告文件已在工作目录中删除,而不是您已对其删除进行版本控制。如果启用了颜色,“deleted”(已删除)将为红色,表示更改已发生,但未暂存,并且在
git rm
之后,deleted(已删除)将显示更改已暂存。