I create a new directory, add it to git and push it.
After push it says: Unable to read current working directory: No such
file or directory
[yuri@yv /usr/ports/math/stanmath]$ git pull -r && git push origin
--push-option=confirm-author
remote: Enumerating objects: 283, done.
remote: Counting objects: 100% (283/283), done.
remote: Compressing objects: 100% (187/187), done.
remote: Total 188 (delta 94), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (188/188), 29.37 KiB | 578.00 KiB/s, done.
Resolving deltas: 100% (94/94), completed with 50 local objects.
From ssh://gitrepo.freebsd.org/ports
80469139f77f..cf8b94761057 main -> origin/main
Successfully rebased and updated refs/heads/main.
fatal: Unable to read current working directory: No such file or directory
Why does Git have to delete and then create again the directory when it
is already there?
This isn't a big issue, but it is very odd that git deletes the working
directory.
FreeBSD 13.
Yuri
On Fri, Aug 27, 2021 at 8:49 PM Yuri [off-list ref] wrote:
I create a new directory, add it to git and push it.
And I think you left out that you cd'ed into the directory as well
before running your `git pull --rebase`.
After push it says: Unable to read current working directory: No such
file or directory
[yuri@yv /usr/ports/math/stanmath]$ git pull -r && git push origin
--push-option=confirm-author
remote: Enumerating objects: 283, done.
remote: Counting objects: 100% (283/283), done.
remote: Compressing objects: 100% (187/187), done.
remote: Total 188 (delta 94), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (188/188), 29.37 KiB | 578.00 KiB/s, done.
Resolving deltas: 100% (94/94), completed with 50 local objects.
From ssh://gitrepo.freebsd.org/ports
80469139f77f..cf8b94761057 main -> origin/main
Successfully rebased and updated refs/heads/main.
fatal: Unable to read current working directory: No such file or directory
Why does Git have to delete and then create again the directory when it
is already there?
This isn't a big issue, but it is very odd that git deletes the working
directory.
It was deleted by the rebase operation, because rebase (currently)
works by first checking out the target commit onto which it will apply
all your local patches. That target didn't have the directory; the
directory was added by your local patches. So checking out that
commit necessarily deletes the directory. Then rebase applies each of
your local patches, one by one, updating the working directory as it
applies them. Since your local patches create that directory, it gets
re-created by this process.
And since your current working directory was inside that directory
that was deleted, later commands get all confused by the current
working directory not existing.
Incidentally, rebase works like this because the default merge
backend, recursive, intrinsically works with the working copy and
updates it as it goes. Rebase could theoretically redo each of the
merges without updating the working copy, assuming there are no
conflicts, and then checkout the new target commit at the end. That'd
require a new merge backend that allowed merging without updating the
working copy, though, which was only recently added (see the Git 2.33
release notes). Rebase has not yet been updated to take advantage of
that capability; there's a good chunk of work involved to try to do
so. And even when it does, you could still hit this problem if rebase
hit a conflict on a local patch where the relevant directory did not
yet exist.
Hope that helps,
Elijah
On 8/27/21 10:33 PM, Elijah Newren wrote:
And I think you left out that you cd'ed into the directory as well
before running your `git pull --rebase`.
Yes, this is how people normally work with this repository. They change
individual directories (ports are like sub-projects) and commit them
while staying in them.
Yuri