logoalt Hacker News

IshKebabtoday at 6:17 PM1 replyview on HN

They're actually saying it's better than `git mv`, because it actually records the move, unlike Git.


Replies

ibejoebtoday at 6:36 PM

I think they're saying the opposite. It won't detect a filesystem-level move. It will simply record a delete and create without the relationship. Git does record the rename, though:

    ~/work/tmp/repo   git init . --quiet
    ~/work/tmp/repo master  echo 'foo' > foo.txt
    ~/work/tmp/repo master?  git add .
    ~/work/tmp/repo master+  git commit -m "create" --quiet
    ~/work/tmp/repo master  mv foo.txt bar.txt # no `git mv`
    ~/work/tmp/repo master*?  git add .
    ~/work/tmp/repo master+  git status --porcelain
    R  foo.txt -> bar.txt
    ~/work/tmp/repo master+  git commit -m "rename"
    [master a06c680] rename
     1 file changed, 0 insertions(+), 0 deletions(-)
     rename foo.txt => bar.txt (100%)
Git knows that the file was renamed even without using git to do the rename. This means that it doesn't matter if you IDE, codemod, agent, or whatever does it. Git tracks that foo.txt and bar.txt refer to the same blob at different revisions.

Maybe lore does the same, but the docs imply that it doesn't.

--

To summarize: lore will record relationship metadata only when performed with `lore stage move <from> <to>`, so you will have to intervene if your other tooling moves files.

show 1 reply