通过在 Finder 中拖动移动文件时通知 git 的方法?

Way to notify git when file is moved by dragging in Finder?

我正在使用 git 来管理我的论文,并且有很多 pdf 期刊文章,随着我的目录结构在接下来的几个月内正常化,我正在使用 Finder 慢慢地重新组织这些文章。我很想找到一种方法来告诉 git 这些文件只是移动了而不是删除并添加为新文件以避免 repo 膨胀。

当我必须移动一个或多个文件夹中的 30 个文件中的 20 个时,从命令行执行此操作很麻烦。

有人有好的方法吗?还是 git 会自动执行但我无法分辨?

谢谢!

如果 PDF 文件在您移动它们的同时没有发生变化,那么它们的内容将具有相同的哈希值(即使您重命名文件并将其移动到另一个目录也是如此。

Git 通常会在提交时自行判断这是一个 move/rename。那是因为它对新路径进行哈希处理,发现它已经知道具有相同哈希值的文件。然后它看到那些文件已被删除,它发现你只是做了一个 move/rename.

无论您 "tell" git 或您如何告诉它,git 总是 将移动的文件理解为 "file at this location deleted; file at this other location created"。它有时会在其输出中将其重新解释为 "file moved from this location to this other location",但不需要特殊提示即可执行此操作。但基本上 git.

中没有 "move" 操作这样的东西

您提到您担心的是回购膨胀。不用担心。即使 git 看到两个内容相同的文件,它也只存储一次内容。内容存储在一个名为 BLOB 的对象中。文件名存储在一个名为 TREE 的类似 "directory listing" 的对象中。因此,当您移动文件时,TREE 中的一个新条目(可能在不同的 TREE 对象中,如果您已将文件移动到不同的目录)只是指向已经-现有 BLOB.

所有这些都是自动的。您当然必须 add/commit 进行更改,但从那里开始就可以了。