我正在开发的项目已经有机地发展,并且回购中的文件大小,文件数量,文件类型等都增长得太多了。我已经搜索了几个git的优化,似乎没有什么能完全符合我的情况。这就是我想要的。
手动跟踪文件 - 当我编辑文件时,我将手动执行git add <file-name>
。 Git的assume-unchanged
没有帮助,因为我必须在每次添加之前做--no-assume-unchanged
。
Git commit应该只添加我在index
中暂存的文件而不用担心任何其他文件。我已经看到git在使用core.ignoreStat
之后花了太多时间。
稀疏结账不应该首先下载整个存储库(即使我使用--depth 1
,它也是一个非常大的存储库)。 (但是,使用git可能无法实现)
我的存储库是这样的,虽然有很多目录,但我只在一小段目录中工作一段时间,然后在其他时间段中工作。一次很少需要所有目录。如果可以有一个命令,比如说git hide <directory>
隐藏工作树中的目录,并且让git无法跟踪它直到我再次需要它,那将会很好。
我已经在使用core.ignoreStat
,status.showUntrackedFiles
,commit.status
。这是我的git配置。
user.email=xxx@xxx
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorestat=true
core.showuntrackedfiles=no
remote.git_ch.url=file:////home/xxx/git_server/linux-namespaces.git
remote.git_ch.fetch=+refs/heads/*:refs/remotes/git_ch/*
branch.master.remote=git_ch
branch.master.merge=refs/heads/master
status.showuntrackedfiles=no
commit.status=false
存储库仍然太慢。
另外 ,你能否说出这些可能的原因?
git add a.txt && git commit -m "a.txt"
a.txt
是一个小文件,也需要很长时间才能完成。有几个git扩展程序,例如git annex
,Google's git repo
等。使用其中任何一个都会有帮助,或者更好地切换到另一个VCS?
我使用的是Ubuntu Gnome 16.04.1。
答案 0 :(得分:3)
注意:Git 2.13可能有助于减轻对大型索引回购的支持:
请参阅commit b460139,commit b2dd1c5,commit c3a0082,commit de6ae5f,commit c0441f7,commit b968372(2017年3月6日)和{{3} },commit 77d6797,commit 0d59ffb,commit 6a5e6f5,commit e77cf4e,commit fcdbd95,commit e6a1dd7,commit 72dcb7b,commit 13c0e4c, commit 66f9e7a,commit b8923bf,commit 6cc1053,commit 4392531,commit cef4fc7(2017年2月27日)commit 1f44b09。
(Christian Couder (chriscool
)于2017年3月17日Junio C Hamano -- gitster
--合并)
修订后的commit 94c9b5a现在包含git update-index
documentation:
拆分索引
此模式适用于具有非常大索引的存储库,以及 旨在减少重复编写这些索引所需的时间。
在此模式下,索引将分为两个文件
- $ GIT_DIR / index
$GIT_DIR/sharedindex.<SHA-1>
。更改在
$GIT_DIR/index
(拆分索引)中累积,而共享索引文件包含所有索引条目并保持不变。拆分索引中的所有更改都会被推回到共享索引 当分割索引中的条目数达到一个级别时的文件 由
Split Index
section指定。每次创建新的共享索引文件时,都会使用旧的共享索引 如果文件的修改时间早于文件,则删除这些文件 由
splitIndex.maxPercentChange
config variable指定。为避免删除仍在使用的共享索引文件,请执行此操作 每次新拆分时,修改时间都会更新为当前时间 基于共享索引文件的索引可以创建或读取。
所以你现在(Git 2.13,2017年第二季度)有配置:
splitIndex.maxPercentChange:
使用拆分索引功能时,指定 拆分索引可以包含的条目百分比 拆分索引和共享中的条目总数 写入新共享索引之前的索引。
该值应介于0和100之间 如果值为0,则始终写入新的共享索引,
如果它是100,则永远不会写入新的共享索引。默认值为20,因此如果拆分索引中的条目数大于条目总数的20%,则会写入新的共享索引。
和
splitIndex.sharedIndexExpire::
使用拆分索引功能时,在创建新的共享索引文件时,将删除自此变量指定以来未修改的共享索引文件。
价值&#34;现在&#34;立即过期所有条目,&#34;永远不会#34;完全抑制过期。
默认值为&#34;
2.weeks.ago
&#34;。请注意,每次基于它创建或从中读取新的拆分索引文件时,都会将共享索引文件视为已修改(为了过期)。
答案 1 :(得分:0)
添加SSD肯定会完成这项工作。我面临着同样的问题。一位同事有一台带有SSD的计算机,他的计算机每一次git动作都要快得多。 我试过你所说的但问题是IO性能真的很低。 Git使用了许多小文件(查看你的.git目录)来管理不同版本的文件,因此糟糕的IO延迟会降低这一点。