在Windows上使用Git和文件属性

10

我注意到在Windows环境下使用Git提交或检出文件时,文件属性(例如隐藏或只读)未被保留。如果我提交了一个隐藏文件,然后在另一台计算机上检出它,该文件将不再是隐藏的。是否有可能使Git识别Windows文件属性?

3个回答

10

不, Git 也没有跟踪完整的 UNIX 权限,它只是为了方便记住可执行位。至于为什么 — 它是一个版本控制系统,旨在主要跟踪源代码。这使得该功能变得毫无用处(更不用说 ‘hidden’ 属性本身就相当无用了)。


好的,谢谢您清晰的回答。我的项目中有一些隐藏和只读文件,但如果必要的话我会手动更改它们。 - StockBreak
1
我也希望有这个功能,它并不是“完全无用的”。例如,Unity 游戏开发环境为管理其场景数据库创建了一个附加的“.meta”文件。需要对这些文件进行版本控制,但任何人都不需要看到它们。 - yoyo
我也会觉得这很有用。我使用VisualStudio下的node/grunt/bower工具链进行开发,并将node_modules和bower_components文件夹设置为隐藏,以防止VS对其进行索引、搜索(甚至显示)在解决方案资源管理器中,这对于平稳开发非常重要。 - Daniel

9
你可以使用 post-checkout 客户端钩子来进行任何必要的更改。在你的情况下,你会使用它来运行一个脚本,设置你想要的 Windows 文件属性。
ProGit 在“其他客户端钩子”段落中概述了这一点: 自定义 Git 钩子 此外,请参阅 githooks 的 man 页面。

1
@wadesworld 您能否提供关于Windows上钩子的示例? - checksum

1
我尝试了@wadesworld的建议,得出以下结论:创建文件\.git\hooks\post-checkout,并将以下内容添加进去:
#!/usr/bin/env pwsh
param (
    $PreviousHead,
    $NewHead,
    # Branch 1, File 0.
    $BranchOrFile
)
$Name = '.HideMe'
if ((Test-Path $Name) -and !(Get-Item $Name -Force).Attributes.HasFlag([IO.FileAttributes]::Hidden)) {
    (Get-Item $Name).Attributes += 'Hidden'
}

.HideMe 更改为您想要隐藏的文件/文件夹,如果需要,还可以使用3个参数,比如仅在分支检出或文件检出时运行。这需要安装PowerShell Core才能工作,但也可能可以在cmd或Windows PowerShell中实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接