可以在跨操作系统网络共享上使用 git 吗?

Posted

技术标签:

【中文标题】可以在跨操作系统网络共享上使用 git 吗?【英文标题】:Possible to use git on cross-OS network share? 【发布时间】:2019-07-19 09:35:59 【问题描述】:

我们有一些工作流程,我们希望使用安装在 NFS 网络共享上的 git 存储库。这通常运作良好,除了行尾。显然,Linux 和 Windows 上的行尾不同,因此 CentOS 主机上的 git status 可能不会显示任何更改,而 Windows 上同一目录中的 git status 会显示所有文件都已修改。

是否可以配置处理行尾的各种 git 机制来支持这种情况?当然,我们只希望在我们的存储库中使用 Unix 风格的行尾,而且我们并不真正关心 Windows SEEING Unix 行尾,但有时,Windows 工具会添加或意外转换文件,然后我们不希望以这些结尾签入。

【问题讨论】:

这个link 可能有用... 【参考方案1】:

这里有几个可能的解决方案。最佳解决方案取决于您是否关心工作树中的结尾。

如果您总是希望存储库中的行尾为 LF,并且您不关心工作树,则可以在存储库的 .gitattributes 文件中设置以下内容(如果它不存在则创建它):

* text=auto

这将使 Git 猜测给定文件是二进制文件还是文本文件,如果是文本文件,它将在检出时执行转换为正确的行尾。在 Unix 上,正确的行尾是 LF,而在 Windows 上,通常是 CRLF(尽管您可以使用 core.eol 来覆盖它)。

如果您总是希望对象和工作树中的行结尾都是 LF,那么您需要做更多的工作。您需要使用eol=lf 适当地设置每个单独的文本文件类型:

*.c text eol=lf
*.h text eol=lf

之所以需要这样做是因为eol=lf 会覆盖文本检测,这意味着将其应用于二进制文件是不安全的,例如 PDF 或 JPEG 文件。如果将其应用于存储库中的所有文件,则会损坏所有碰巧包含 CRLF 的二进制文件。

不管你做什么,你都应该做一个git add --renormalize .,然后是一个git commit。这将确保存储库中的所有文件都包含 LF 结尾,并且每当 Git 检出它们时,它们都会以适当的结尾检出。这并不能阻止 Windows 工具使用 CRLF 行结尾弄脏存储库,但如果他们不小心这样做了,只会签入 LF 结尾。

【讨论】:

以上是关于可以在跨操作系统网络共享上使用 git 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Git之深入解析在没有合适的网络或者可共享仓库情况下的git bundle打包操作

小米手机,给电脑共享网络,手机显示ipv6不可用,电脑上驱动安不了,xp的系统,哪里不对吗

无法在跨域上使用 JSONP 发布数据

一个表可以跨多个数据库共享吗

我应该使用操作扩展的共享扩展吗?

映射网络驱动器是啥