当Git在提交消息中说"重写"或"重命名"时,它意味着什么?

Man*_*lva 35 git git-commit

运行git commit导致以下输出:

[manu@host] git: git commit -a -m "StreamIt instrumentation"
[master 263410f] StreamIt instrumentation
62 files changed, 6117 insertions(+), 5748 deletions(-)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/cluster/ClusterBackend.java (91%)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/cluster/ClusterCodeGenerator.java (95%)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/cluster/code/FlatIRToCluster.java (94%)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/common/ToCCommon.java (92%)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/flatgraph/ScheduledStaticStreamGraph.java (93%)
rename Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/sir/lowering/fission/{StatelessDuplicate.java => HorizontalFission.java} (98%)
rewrite Code/ALCHEMY/streamit-src-2.1.1/src/at/dms/kjc/sir/lowering/partition/dynamicprog/DynamicProgPartitioner.java (93%)
Run Code Online (Sandbox Code Playgroud)
  • 当git报告文件为'重写'时,git意味着什么?
  • 相关百分比的含义是什么?
  • 为什么在此提交中更改的62中仅与这些行相关联的百分比?

ara*_*nid 40

Git使用启发式方法来确定更改是重命名还是复制文件,以及是否是文件的"重写".粗略地说,如果旧版本和新版本之间的差异大于新版本本身,那么它就是"重写".

这是针对git改变源文件的原始用例进行调整的,最常见的是进行本地化更改:因为它基于逐行差异,所以像重新发送源文件这样的事情可以触发它.此外,由于它是即时确定的,因此像"-b"和"-w"这样的差异选项可以改变对更改是重写(或复制,还是重命名)的评估.

百分比是git的"相异指数"(与重命名或副本的"相似性指数"百分比相对).可能类似于文件中已更改的行的百分比.

  • 好的,但是这有什么影响呢?它是否以某种方式修改日志显示?如果 `foo.txt` 显示 65% 重写,那么以前版本的 `foo.txt` 是否不会在历史记录中显示为同一文件,即使它尚未重命名?换句话说,这是一个启发式的目的是什么?Git 官方文档中对此有何解释?您的回答对于开始确实很有帮助,但它留下了更多未解答的问题...... (4认同)
  • 好的,谢谢你的解释。我在 Eclipse 中对这个 java 文件执行了 Ctrl+Shift+F,即自动格式化,结果文件发生了很多变化。git 输出是否仅显示重写和重命名的文件,而不显示“小更改”的文件,这意味着在我的情况下,62 个文件中的所有其他更改都是小更改? (2认同)