我有一台Windows PC,在同一台PC上我在VMWare播放器中有一个Lubuntu VM。
我共享我的Windows文件夹,以便从Lubunutu VM中看到它们。
我的问题是当我在Windows上克隆一个Git repo(使用Tortoise Git)然后尝试从Lubuntu访问它时(从命令行使用Git)所有文件都显示已修改但我没有更改它们。
我知道这样做的原因是Windows和Linux以不同的方式处理新行。
我的问题是如何在Windows和Lubuntu上配置我的Git安装,所以我没有这个问题?
更新
正如所建议的(Craig Estey),这似乎不是CRLF问题。我尝试在共享目录中的Linux VM中克隆一个repo并出现以下错误:
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.`
我在VM的本地驱动器上克隆相同的repo没有问题。
任何想法可能是什么原因?
注意:我想要这样做的主要原因是为了保持我的VM的驱动器大小,并尽可能地使用共享驱动器。我的VM的本地驱动器位于SSD驱动器上,共享驱动器位于更大的HDD上。
答案 0 :(得分:1)
假设您将存储库放入Windows共享文件夹中。
mount (Mount shared folder on Ubuntu)Ubuntu上的共享文件夹,因此您可以克隆该存储库。 (谈论你不能克隆,它一定是另一个问题。我测试了它,对我有好处。)
当您cd
到该安装中的该存储库时,您会看到所有文件都在Ubuntu上被修改,那么它应该是EOL问题。
在Windows上, autocrlf 默认为 true (假设您使用的是Git for Windows)。
在Windows上克隆存储库时,将使用CRLF EOL结帐文件。
但是,在Ubuntu上, autocrlf 默认为 false 。在Ubuntu上挂载的存储库中使用git,git期望EOL是LF。但是,EOL仍然是CRLF。这就是为什么git会将所有文件视为在Ubuntu上修改的文件。
要解决此问题,请确保两个操作系统使用相同的autocrlf值,或使用.gitattributes来控制EOL。
例如,使用false值:
在Windows上,
删除该存储库工作树中的所有文件。
(注意:如果您有本地更改,请先提交。)
仅为该存储库运行git config core.autocrlf false
。或者
TortoiseGit -> Setting
Git
节点,选择local
并取消选中AutoCrlf
执行 git reset hard 以使用正确的EOL恢复所有文件。
Reset "<current branch name>" to this
在Ubuntu上,您不应该看到所有文件都被修改过。
使用.gitattributes:
* -crlf