为什么Git在重命名后会保留以前的目录(比如复制目录)?
有这样一种情况,假设我有为什么Git在重命名后会保留以前的目录(比如复制目录)?,git,Git,有这样一种情况,假设我有dev分支和这样的项目结构MyProj/Foo/MyFile.java。 然后我先进行checkoutdev->dev test,然后放入一些文件并进行提交,现在看起来是这样的 MyProj/Foo/MyFile.java MyProj/Foo/MyFile2.java MyProj/Foo/MyFile3.java 现在,我从dev->dev test second中再签出一次,首先将Foo目录重命名为Boo,然后删除MyFile.java,添加MyFile4.ja
dev
分支和这样的项目结构MyProj/Foo/MyFile.java
。
然后我先进行checkoutdev->dev test
,然后放入一些文件并进行提交,现在看起来是这样的
MyProj/Foo/MyFile.java
MyProj/Foo/MyFile2.java
MyProj/Foo/MyFile3.java
现在,我从dev->dev test second
中再签出一次,首先将Foo
目录重命名为Boo
,然后删除MyFile.java
,添加MyFile4.java
,并提交它
dev第二次测试的结果
br
MyProj/Boo/MyFile4.java
最后,我将这两个分支devtestfirst
和devtestsecond
与maindev
分支合并
我期望得到什么
这个
对吧??但实际上这就是我得到的
MyProj/Foo/MyFile2.java
MyProj/Foo/MyFile3.java
MyProj/Boo/MyFile4.java
git没有重命名,而是持有两个dirBoo
和Foo
,尽管它被重命名了
问题是:为什么会发生这种意外行为?Git跟踪内容。目录只作为跟踪内容的路径进行跟踪,而不是作为任何值得关注的内容进行跟踪。提交告诉您他们正在记录的效果,您的开发测试第二次提交应该说~delete Foo/MyFile.java;创建Boo/MyFile4.java~。我没有真正理解你的问题。你能发布一个简短的片段和你得到的准确输出吗?@Maroun Case是-我有dev br->从dev
第一个和第二个
->多做两个分支br我在第二个添加两个新文件br我重命名dir,删除文件并添加另一个文件->然后将这两个分支第一个和第二个
合并到dev
。然后,我在问题的最后公布了预期和实际结果。相反,所有文件都存在于重命名的dir-Boo中,我看到两个dir,一个是Foo
(初始dir)和Boo
重命名的dir。。。你明白我的意思了吗?对我来说,这是期望你将一个分支与…/foo/stuff和…/bar/stuff合并。重命名是独立的。是的,关于MyFile.java
它被删除了,编辑了我的问题,你是对的。但无论如何,我希望看到重命名目录下的所有文件Boo
。。。所以,这意味着,假设两个开发人员在diff分支上工作,其中一个重命名一个dir,然后进行合并,因此,有人必须进行重构,并将所有文件放在单个dir下,就像我的问题中的Boo
,因为在这种情况下,文件不应该在diff dirs中。。。对吗?如果您记住目录是路径名的一部分,那么您就可以轻松地使用它了。实现这一机制的痛苦/收益比太高了,我对这一意外表示同情,但Git不会帮助您,移动一个文件不会被合并为移动其他文件的命令。你必须自己移动它们。
MyProj/Foo/MyFile2.java
MyProj/Foo/MyFile3.java
MyProj/Boo/MyFile4.java