git forces refresh index after switching between windows and linux
As torek mentioned, you probably don't want to do this. It's not generally a good idea to share a repo between operating systems.
However, it is possible, much like it's possible to share a repo between Windows and Windows Subsystem for Linux. You may want to try setting core.checkStat
to minimal
, and if that isn't sufficient, core.trustctime
to false
. That leads to the minimal amount of information being stored in the index, which means that the data is going to be as portable as possible.
Note, however, that if your repository has symlinks, that it's likely that nothing you do is going to prevent refreshes. Linux typically considers the length of a symlink to be its length in bytes, and Windows considers it to take one or more disk blocks, so there will be a mismatch in size between the operating systems. This isn't avoidable, since size is one of the attributes used in the index that can't be disabled.
You are completely correct here:
The thing you're using here, which Git variously calls the index, the staging area, or the cache, does in fact contain cache data.
The cache data that it contains is the result of system calls.
The system call data returned by a Linux system is different from the system call data returned by a Windows system.
Hence, an OS switch completely invalidates all the cache data.
... how can I use set the index file for different system?
Your best bet here is not to do this at all. Make two different work-trees, or perhaps even two different repositories. But, if that's more painful than this other alternative, try out these ideas:
The actual index file that Git uses merely defaults to .git/index
. You can specify a different file by setting GIT_INDEX_FILE
to some other (relative or absolute) path. So you could have .git/index-linux
and .git/index-windows
, and set GIT_INDEX_FILE
based on whichever OS you're using.
Some Git commands use a temporary index. They do this by setting GIT_INDEX_FILE
themselves. If they un-set it afterward, they may accidentally use .git/index
at this point. So another option is to rename .git/index
out of the way when switching OSes. Keep a .git/index-windows
and .git/index-linux
as before, but rename whichever one is in use to .git/index
while it's in use, then rename it to .git/index-name
before switching to the other system.
Again, I don't recommend attempting either of these methods, but they are likely to work, more or less.