可以在跨操作系统网络共享上使用 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打包操作