-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
git clean follows directory junctions rather than removing them #5320
Comments
Oh wow, is this path longer than 4095 characters? https://github.com/git-for-windows/git/blob/v2.47.1.windows.1/compat/win32/fscache.c#L128 |
I think the actual bug is that it's following a symlink (reparse point). I ran the build and I see: > dir
Directory of C:\_\B\src\rustc-1.83.0-src\build-CLANGARM64\aarch64-pc-windows-gnullvm\stage0-sysroot\lib\rustlib\rustc-src
12/17/2024 07:46 PM <DIR> .
12/17/2024 07:46 PM <DIR> ..
12/17/2024 07:46 PM <JUNCTION> rust [\??\C:\_\B\src\rustc-1.83.0-src]
> fsutil reparsepoint query rust
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitue Name offset: 0
Substitue Name length: 62
Print Name offset: 64
Print Name Length: 0
Substitute Name: \??\C:\_\B\src\rustc-1.83.0-src
Reparse Data Length: 0x4a
Reparse Data:
0000: 00 00 3e 00 40 00 00 00 5c 00 3f 00 3f 00 5c 00 ..>.@...\.?.?.\.
0010: 43 00 3a 00 5c 00 5f 00 5c 00 42 00 5c 00 73 00 C.:.\._.\.B.\.s.
0020: 72 00 63 00 5c 00 72 00 75 00 73 00 74 00 63 00 r.c.\.r.u.s.t.c.
0030: 2d 00 31 00 2e 00 38 00 33 00 2e 00 30 00 2d 00 -.1...8.3...0.-.
0040: 73 00 72 00 63 00 00 00 00 00 s.r.c..... Hopefully that helps you figure out why |
It looks like this is a Directory Junction reparse point (a la mkdir test
cd test
git init
mkdir -p 'B/src/rustc-1.83.0-src/build-CLANGARM64/aarch64-pc-windows-gnullvm/stage0-sysroot/lib/rustlib/rustc-src/'
cmd //s //c 'mklink /j B\src\rustc-1.83.0-src\build-CLANGARM64\aarch64-pc-windows-gnullvm\stage0-sysroot\lib\rustlib\rustc-src\rust B\src\rustc-1.83.0-src'
git clean -xfdf Unfortunately, I'm not getting the
But either way, Since it's not hitting the mkdir test
cd test
git init
cmd //s //c 'mklink /j foo .'
git clean -xfdf or if you want to be evil, make the link target c:\windows or something 😈 |
Cygwin/MSYS2 seems to know those are symlinks: > msys2.cmd -here -c "stat rust"
File: rust -> /c/_/B/src/rustc-1.83.0-src
Size: 27 Blocks: 0 IO Block: 65536 symbolic link
Device: f6731b96h/4134738838d Inode: 562949954086902 Links: 1
Access: (0777/lrwxrwxrwx) Uid: (197108/Administrator) Gid: (197121/ None)
Access: 2024-12-17 19:46:25.373475100 +0000
Modify: 2024-12-17 19:46:25.373475100 +0000
Change: 2024-12-17 19:46:25.373475100 +0000
Birth: 2024-12-17 19:46:25.373475100 +0000 |
Setup
defaults?
to the issue you're seeing?
ARM64 Windows
Details
Run git from python.
Minimal, Complete, and Verifiable example
this will help us understand the issue.
Successfully removing non-tracked files.
URL to that repository to help us with testing?
Obtained during msys2-autobuild run building rust. I kind of suspect some type of circular link that Git isn't detecting/handling properly. Unfortunately I
rmdir /s
'ed the thing to get the runner back, but I could probably reproduce it again if you'd like me to try some commands to figure out what the link is and why Git for Windows followed it instead of removing it.The text was updated successfully, but these errors were encountered: