git 结帐需要几个小时

git checkout takes hours

我正在试验我的自托管 GitLab 实例,所以我将我的 git 回购推送给它。 GitLab 上的存储库占用 14 GB 并包含多个 lfs 对象。使用以下命令克隆我的分支大约需要 1-2 分钟。

$ git clone http://[ip:port]/repo/bavoo.git
Cloning into 'bavoo'...
remote: Enumerating objects: 773299, done.
remote: Total 773299 (delta 0), reused 0 (delta 0), pack-reused 773299
Receiving objects: 100% (773299/773299), 541.07 MiB | 2.44 MiB/s, done.
Resolving deltas: 100% (633879/633879), done.

但是后面结账的时间超过了两个小时(可能更久,我取消了)。我不知道 git 在做什么。有没有机会看看结帐分支需要这么长时间?

$ git checkout bavoo_test

为了完整起见,这里是我的 OS、gitgit lfs

的版本号
$ macos-version
10.15.3 (19D76)
$ git --version
git version 2.24.1
$ git lfs --version
git-lfs/2.8.0 (GitHub; darwin amd64; go 1.12.7)

编辑:

根据要求,这是 git lfs env 的输出:

Endpoint=http://[ip:port]/repo/bavoo.git/info/lfs (auth=basic)
LocalWorkingDir=/Users/daniel/Desktop/bavoo
LocalGitDir=/Users/daniel/Desktop/bavoo/.git
LocalGitStorageDir=/Users/daniel/Desktop/bavoo/.git
LocalMediaDir=/Users/daniel/Desktop/bavoo/.git/lfs/objects
LocalReferenceDirs=
TempDir=/Users/daniel/Desktop/bavoo/.git/lfs/tmp
ConcurrentTransfers=3
TusTransfers=false
BasicTransfersOnly=false
SkipDownloadErrors=false
FetchRecentAlways=false
FetchRecentRefsDays=7
FetchRecentCommitsDays=0
FetchRecentRefsIncludeRemotes=true
PruneOffsetDays=3
PruneVerifyRemoteAlways=false
PruneRemoteName=origin
LfsStorageDir=/Users/daniel/Desktop/bavoo/.git/lfs
AccessDownload=basic
AccessUpload=basic
DownloadTransfers=basic
UploadTransfers=basic
GIT_EXEC_PATH=/usr/local/Cellar/git/2.24.1/libexec/git-core

运行 git lfs env 并确保一切正常。

GIT_TRACE 环境变量设置为 1 以获取调试信息。

请注意,git checkout 涉及底层的 LFS 远程交互。

如果您只需要在本地结账,您有这些选项;

  • GIT_LFS_SKIP_SMUDGE=1 git checkout origin/master -- 无需从远程下载即可结帐
  • git reset --soft origin/master 在不更改工作区的情况下转到提交哈希

不用说了,GIT_LFS_SKIP_SMUDGE可以导出,这样你在git结账的时候就不用老是打字了。或者您可以使用 .lfsconfig 来禁用自动 LFS 下载,请参阅此 https://github.com/git-lfs/git-lfs/issues/2717.