在git下提交文件时如何控制重命名阈值?

时间:2013-02-12 12:49:03

标签: git rename git-commit

我正在尝试将特定项目的连续快照放入git的历史记录中。我这样做是通过使用每个快照的内容填充存储库目录,然后运行

git add -A .
git commit -m 'Version X'

这是this answer中建议的方法。但是,我发现只有当100%的文件内容保持不变时,提交才会识别文件重命名。有没有办法影响git commit的重命名检测,使其找到文件内容发生了一些变化的重命名?我看到git mergegit diff有多种控制重命名阈值的选项,但git commit不存在这些选项。

我尝试过的事情:

  • 使用home-brew脚本找到重命名的文件,并在提交新文件内容之前执行提交,将原始文件重命名为新位置。然而,这引入了一个人工提交,并且看起来不够优雅,因为它不使用git的重命名检测功能。
  • 为每个快照创建一个单独的分支,然后使用

    将连续的分支合并到master

    git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20

    但是,这使我保留了旧版本的重命名文件,同时也无法检测到重命名。

2 个答案:

答案 0 :(得分:11)

git commit从不检测重命名。它只是将内容写入存储库。重命名(以及副本)仅在事后检测到,即在运行git diffgit merge和朋友时。那是因为git不存储任何重命名/复制信息。

答案 1 :(得分:9)

如评论和另一个答案所示,在提交中调整重命名检测阈值没有意义,因为这只会改变命令的输出,而不是实际存储在提交中的输出。

可以做的是调整git log命令中的重命名检测阈值。您可以使用--find-renames参数执行此操作。这主要完成了我想要实现的结果。