GIT有一个功能,就是可以自定义.git这个目录的名字和路径,当然也可以自定义工作目录的路径。两者分别使用GIT_DIR和GIT_WORK_TREE变量修改。这个功能除了表面上修改名字的用途外,还有更深入的用法。比如实现一个版本库,多个工作目录,多个分支同时开发和提交等等。这种用法本文不作探讨(事实上我目前也尚未完全找到一个合理的方法)。这里要说的就是GIT_WORK_TREE这个变量。

在命令行上使用git的时候,该变量的缺省值就是当前目录pwd。但是在使用git gui的时候却不是这个值(或许是HOME?)。这就导致了一个问题,那就是如果我们自定义了版本库目录.git,那么git gui就无法获取当前工作目录下的修改情况了。比如git status可以正确获取更改列表,但是git gui后,列表中的文件变化情况就不对。

解决方法就是要手动设置一下GIT_WORK_TREE这个变量。