2013-02-12 79 views
2

首先的问题git扩展来明确跟踪文件重命名?

是否有任何工具或补丁的git,使得它专门存储元数据有关文件重命名(很像混帐SVN以“混帐svn的-ID”一样)? 没有这个,是否有另一个DVCS给我快速的本地分支(如git)和适当的文件重命名跟踪(如集市)?

现在一些背景,为什么我需要这样的:

我开始使用了几个月的混帐,我真的很喜欢它。除了它不跟踪重命名的事实。

在我看来,不跟踪重命名的决定是基于错误的假设,它是重要的内容,而不是名称。我不同意。让我给你一个真实世界的例子。

我有一个类RefinementPresentation它被用作网页视图模板中的模型。我将这个类移动到一个单独的包(模型)中,然后,因为类不仅仅是一个模型,而且包含了大量的逻辑,所以我通过将逻辑移动到另一个类来重构它。你可以想象,现在这个班与原来的班级几乎没有什么相似之处。但从概念上讲,这是一回事 - 它仍然是这个观点的模型。 这就是我的观点。无论文件是相同的文件(重命名/移动)还是不同的文件都是我脑海中的概念,没有工具可以或不应该尝试为我做。如此不同,没有任何启发式或猜测会让git认识到这实际上是一个移动的文件。这意味着git日志永远不会显示过去的移动历史。当然,历史依然存在 - 它不会丢失 - 这很难实现。因此我的问题是:有没有办法避免这种不便?

编辑:移动和重构在不同的提交是一个很好的解决方法,请参见下面的评论(感谢伊布!)。

+3

移动并在单独的提交中重构该文件。 – Eevee 2013-02-12 06:55:59

+0

可能重复[如何真正显示重命名文件的日志与git?](http://stackoverflow.com/questions/5743739/how-to-really-show-logs-of-renamed-files-with-git) – CharlesB 2013-02-12 07:11:59

+0

正如问题中所解释的那样,这些文件实际上是不同的,所以“git log --follow”或类似的命令永远无法帮助。我需要一种不同的方法来跟踪重命名,不会根据文件内容的相似性来猜测它们。 – 2013-02-12 07:20:24

回答

3

最小的努力,最大的回报:在单独的提交中移动和重构文件。

为什么它的价值,git不是完全这里疯了,并有various sensible reasons它的作用 - 不是它的安慰。 :)

+0

感谢您的解决方案。
2013-02-13 06:25:37

+1

我之前阅读过这篇文章,现在重新阅读。但即使它在理论上听起来不错,正如我以前所展示的那样,它没有认识到现实世界的事实,即它是否是重命名是开发者头脑中的概念,有时与文件的内容无关,而是与文件所代表的内容相关。没有工具可以猜到。我认为,即使它尝试,它仍然应该跟踪重命名并回退到重命名元数据丢失时(或者开发人员选择使用它而不是元数据时)的猜测算法。 – 2013-02-13 06:33:31

+0

它比这更复杂一点:为什么我不得不使用我的源代码控制工具来执行文件系统操作?合并问题呢?那副本呢?当文件的一部分移动到另一个文件时应该进行特殊处理吗?你如何向vcs表明THAT? git从来没有声称存储你的思维过程 - 这是提交消息的目的。地狱,其手册页的第一行称它为:一个愚蠢的内容跟踪器。 – Eevee 2013-02-13 19:55:47