On 11.03.2013, at 23:54, Andrew Wong wrote: > On 3/11/13, Max Horn <max@xxxxxxxxx> wrote: >> Looking at the git config man page to check what each of my config settings >> does, I discovered "trustctime". And adding >> trustctime = false >> to .git/config made the rebase work, every single time. Huh. >> >> >> Adding this to the fact that a clone works fine, I wonder if something *is* >> touching my files, but just in that directory. But what could it be? One >> nagging suspicion is the "file versioning" feature Apple introduced as part >> of Time Machine in OS X 10.7; it's kind of a "version control system for >> n00bs" for arbitrary documents. It has caused me some pain in the past. >> >> But I just re-checked, and problematic repos is explicitly on the Time >> Machine exclusion list. I also used the "tmutil isexcluded FILES" to verify >> that the problematic files are really on the TM exclusion list. Finally, I >> moved the one of the repos subdirectory containing most of the problematic >> files, and then run "git checkout". In other instances, this sufficed to >> "disassociate" a file from an unwanted TM version history. But doing that >> had no effect here, i.e. also with the freshly regenerated files, the >> problems appear. > > Would you be able to turn off Time Machine completely and do a few > tests? If it does works, then it becomes a matter of fixing Time > Machine... I did turn it off just now, but no effect. Then again, daemons like revisiond were still running... One more thing: I used the "fs_usage" to monitor what process accessed what file during one of those failing "git rebase" runs. I then searched through this to determine which processes accessed the "bad" file in this time. The result where these processes (aggregated): git revisiond fseventsd git-merge-recursive Note that Time Machine was not running, but revisiond is... from its manpage: revisiond is the daemon that manages document revisions created by applications and system services. There are no configurations to revisiond, and users should not run revisiond manually. This is the process I am suspecting. Specifically, a fchflags call it makes (see that attached excerpt of the fs_usage output). I am not sure, but my guess would be that it sets SF_ARCHIVED on the file. Causing its ctime to wander... Yuck. But I don't know how to control it... and I am not sure if I can just kill it. Hrm. I'll try to dig some more into it, perhaps I can somehow confirm that this is *really* the cause of the problems, and somehow prevent it. Cheers, Max
00:59:54.349156 lstat64 src/BAD_FILE 0.000050 git.623953 00:59:54.349160 open F=5 (R_____) src/BAD_FILE 0.000004 git.623953 00:59:54.350659 close F=5 0.000007 git.623953 00:59:54.371716 lstat64 src/BAD_FILE 0.000002 git.623955 00:59:54.429674 lstat64 src/BAD_FILE 0.000002 git.623959 00:59:54.600060 lstat64 src/BAD_FILE 0.000007 git.623959 00:59:54.600151 stat64 /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000006 revisiond.623963 00:59:54.600154 stat64 /Users/mhorn/the-path-to-my-repository/src 0.000003 revisiond.623963 00:59:54.600160 open F=7 (R_____) /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000006 revisiond.623963 00:59:54.600161 fstatfs64 F=7 0.000002 revisiond.623963 00:59:54.600163 close F=7 0.000002 revisiond.623963 00:59:54.600387 unlink src/BAD_FILE 0.000328 W git.623959 00:59:54.600429 open F=5 (_WC__E) src/BAD_FILE 0.000039 git.623959 00:59:54.602910 write F=5 B=0x4000 0.000040 git.623959 00:59:54.602932 write F=5 B=0x4000 0.000017 git.623959 00:59:54.602947 write F=5 B=0x4000 0.000011 git.623959 00:59:54.602958 write F=5 B=0x4000 0.000009 git.623959 00:59:54.602969 write F=5 B=0x4000 0.000009 git.623959 00:59:54.602977 write F=5 B=0x12f5 0.000007 git.623959 00:59:54.602983 fstat64 F=5 0.000004 git.623959 00:59:54.603032 close F=5 0.000049 git.623959 00:59:54.621731 lstat64 /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000004 fseventsd.1664 00:59:54.882870 lstat64 src/BAD_FILE 0.000002 git.623993 00:59:54.882872 open F=5 (R_____) src/BAD_FILE 0.000003 git.623993 00:59:54.883042 close F=5 0.000002 git.623993 00:59:55.021956 lstat64 src/BAD_FILE 0.000003 git.624027 00:59:55.021959 open F=4 (R_____) src/BAD_FILE 0.000003 git.624027 00:59:55.022138 close F=4 0.000003 git.624027 00:59:56.600440 open F=7 (R_____) /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000014 revisiond.623963 00:59:56.600442 fcntl F=7 <GETPATH> 0.000002 revisiond.623963 00:59:56.600445 close F=7 0.000004 revisiond.623963 00:59:56.600449 stat64 /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000004 revisiond.623963 00:59:56.600452 stat64 /Users/mhorn/the-path-to-my-repository/src 0.000003 revisiond.623963 00:59:56.600455 open F=7 (R_____) /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000004 revisiond.623963 00:59:56.600457 fstatfs64 F=7 0.000002 revisiond.623963 00:59:56.600459 close F=7 0.000002 revisiond.623963 00:59:56.600687 open F=7 (R_____) /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000006 revisiond.623963 00:59:56.600688 fstat64 F=7 0.000002 revisiond.623963 00:59:56.600698 fchflags F=7 <UNKNOWN> [garbled output removed] 0.000010 revisiond.623963 00:59:56.600701 close F=7 0.000003 revisiond.623963 00:59:56.624161 lstat64 /Users/mhorn/the-path-to-my-repository/src/BAD_FILE 0.000004 fseventsd.1664 00:59:56.981172 lstat64 src/BAD_FILE 0.000004 git.624517 00:59:57.015622 lstat64 src/BAD_FILE 0.000005 git.624527 00:59:57.118844 lstat64 src/BAD_FILE 0.000005 git-merge-recurs.624544 01:00:00.194634 lstat64 src/BAD_FILE 0.000002 git.624580 01:00:00.194637 open F=5 (R_____) src/BAD_FILE 0.000003 git.624580 01:00:00.194815 close F=5 0.000003 git.624580