git 非常慢,有很多被忽略的文件

标签 git gitignore tortoisegit

我已经建立了一个存储库来包含一个工作目录,该目录包含数以万计的文件、数千个目录和数 Gb 的数据。此目录位于 samba 共享上。我只想在版本控制下的这个目录中有几十个源文件。

我已经这样设置了 gitignore 文件并且它有效:

# Ignore everything
*

# Except a couple of files in any directory
!*.pin
!*.bsh
!*/

对存储库的操作(例如提交)需要几分钟才能完成。这太长了,无法合理地完成任何工作。我怀疑速度变慢是因为 git 正在遍历每个目录以查找可能已更新的文件。

在工作目录中只有几个位置有我想要跟踪的文件,因此我尝试使用此查询缩小要检查的文件集的范围:

*
!/version_2/analysis/abcd.pin
!/version_2/analysis/*.bsh
!*/

这也有效,但它仍然和不太合格的 gitignore 一样慢。我猜最后一行才是关键,但无论我如何尝试使 unignore 模式非常具体,我总是必须包含最后的通配符子句,以便进程找到要提交的任何文件。

所以我的两部分问题是

1) 是否有更好的方法来设置 gitignore 文件,通过仅包括包含相关结果的非常狭窄的目录和文件类型集来帮助加快提交过程?

2) 是否需要对 git 或 samba 进行一些其他调整以提高这项工作的效率?

谢谢,

汤姆

最佳答案

经过一番摸索,我找到了一种只需修改 .gitignore 文件即可显着提高性能的方法。

性能问题是由我忽略所有然后指定要忽略的方法引起的。这有一个很好的简洁规范(4 行),但速度真的很慢。它导致 git 遍历整个目录树以检测更改的内容。

我的新改进方法是仅使用排除模式。使用它我可以指示要修剪的大 Twig 。我不得不添加一组更冗长的文档和文件类型来排除,这需要几次迭代才能正确,因为有太多了。由于数据集的性质,可能需要更多维护 .gitignore如果出现新的文件类型,将来需要文件,但这是一个很小的代价。

这是我最后的 .gitignore文件看起来像:

# prune large input data and results folders where ever they occur
../data/
../results/

# Exclude document types that don't need versioning,
# leaving only the types of interest
*~
*#
*.csv
*.doc
*.docx
*.gif
*.htm
*.html
*.ini
*.jpg
*.odt
*.pdf
*.png
*.ppt
*.pptx
*.xls
*.xlsx
*.xlsm
*.xml
*.rar
*.zip

提交时间现在缩短到几秒钟。

总的来说,这仍然很简单,尽管不如我最初的 4 行那么干净。

经过审查,我认为我的问题是我成为了自己过早优化的牺牲品。

关于git 非常慢,有很多被忽略的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642527/

相关文章:

git - .npmignore 和 .gitignore 有什么区别?

visual-studio-code - 如何在 vscode 中删除或停止自动生成 debug.log 文件?

windows - 如何从批处理文件运行命令并立即返回?

node.js - 具有对私有(private)存储库的只读访问权限的 GitHub 访问 token

node.js - 如何将文件夹添加到 .gitignore

linux - 无法关闭 hyperledger-fabric 启动的示例网络 - 权限被拒绝

git 推送错误 : HTTP request failed: The requested URL returned 504

git - 从 Github 克隆存储库到 Windows

git - 如何更改存储库链接到的复刻

git - cherry-pick merge 提交时的主线父编号