为什么我的VM中的git状态会有所不同?

时间:2012-03-15 17:37:17

标签: git virtual-machine

我有一个共享文件夹,这是我的Rails应用程序。我在Win7中编辑RubyMine中的代码,并在Linux VM中运行服务器。此设置工作正常。我总是在Win中完成所有提交/分支/等,通常来自RubyMine或GitBash。

然而,今天我在Win7中的GitBash以及linux vm中进行了git status。结果截然不同。

# git bash win 7
$ git status
# On branch master
nothing to commit (working directory clean)

# linux 
~/app> git status
# On branch master
# Changes not staged for commit:
#
#   modified:   .dbshell
#   modified:   .gitignore
# etc... 50 more entries...

我假设(错误地假设)git状态将来自.git目录中的文件。似乎没有发生这种情况,因为两个操作系统中的文件都是相同的。所以:

  1. git status如何确定列表中的文件?
  2. 为什么git status在VM中会有所不同?

2 个答案:

答案 0 :(得分:0)

我不确定diff是如何决定列表中的文件的,但我的猜测是它首先比较两个文件的SHA-1哈希值;如果它们是相同的,则文件没有改变。如果它们不同,则运行差异以查看差异是否显着(即,它可能忽略行结束问题等)。

我的猜测是,这是一个终结问题。在Windows上,diff看到CRLF行结尾没有问题,但在Linux中,它将文件标记为不同。您要查看的Git属性是core.whitespace(文档:http://progit.org/book/ch7-1.html)。检查每个操作系统(git config -l)上的配置。您可能想要的是设置cr-at-eol选项。

答案 1 :(得分:0)

我有一个类似的问题,使用Ubuntu并在虚拟机中使用Windows 7。根据Ethan的建议,我通过使用以下命令在我的Ubuntu上将core.autocrlf属性配置为true来解决:

git config --global core.autocrlf true