Re: [Request] Git reset should be able to ignore file permissions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Alexander Nestorov <alexandernst@xxxxxxxxx> writes:

> I'm not trying to ignore the x bit, what I'm trying to do is make
> "git reset" checkout only the files that actually changed instead
> of checking out all the files with different permissions than the
> ones git thinks they should have.

Ah, OK, you want "git reset --hard" to just do a chmod, which would not
touch the file's mtime (but only the ctime).

Then, it's even easier to demonstrate: just "touch" instead of chmod.
Indeed:

$ touch myfile; sleep 2                        
$ strace -f git reset --hard 2>&1 | grep myfile
lstat("myfile", {st_mode=S_IFREG|0755, st_size=5, ...}) = 0
lstat("myfile", {st_mode=S_IFREG|0755, st_size=5, ...}) = 0
unlink("myfile")                        = 0
open("myfile", O_WRONLY|O_CREAT|O_EXCL, 0777) = 4

(sleep 2 is needed in the demonstration to avoid the "racy git"
safeties, but it's not really important)

Git doesn't even try to read the file content: once it detected that the
stat information changed, it rewrite the file without looking at its
content. It's faster this way for files that actually changed.

> Said with other word: when you run "git reset", git does a "status"
> and checkouts all the files that showed up from the "status".

No, it's indeed the opposite: "status" re-checks the content of changed
files, and update the stat-cache in the index accordingly if the content
actually didn't change.

Runing "git status" before "git reset --hard" should solve your problem.
The part of "git status" of interest is "git update-index --refresh":

$ touch myfile; sleep 2                        
$ git update-index --refresh
$ strace -f git reset --hard 2>&1 | grep myfile
lstat("myfile", {st_mode=S_IFREG|0755, st_size=5, ...}) = 0
$

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]