我在使用 Azure Releases 将存储库 pull 到远程计算机时遇到问题。
当转到 .git/objects/pack 文件夹时,我可以看到多个包文件(这些文件当前为 5.1gb) - 我删除了存储库并重新运行了发布,但它仍在执行。在我删除它之前,我有超过 10 个这样的文件。
在同一台机器上,我还尝试放置 SourceTree 并使用它来 pull 存储库。 SourceTree git 文件夹和我的本地 git 文件夹都不包含多个包文件,而只包含一个。
我已将我正在使用的 Powershell 脚本放在这里:
$resourcesPath = "`$(ResourcesPath)"
$environment = "`$(EnvironmentShortName)"
$path = Join-Path -Path $resourcesPath -ChildPath $environment
$resourceCommit = (Get-Content -Path "`$(System.DefaultWorkingDirectory)/resources/Metropolis-Resources/commit" -First 1).Trim()
$repo = "Metropolis-Resources"
$env:GIT_REDIRECT_STDERR = '2>&1'
Write-Output "Checking out commit: $resourceCommit"
if(-not (Test-Path -LiteralPath $path))
{
New-Item -Path $path -ItemType Directory -Force
$doInit = $true
}
Write-Host "Setting path: $path"
Set-Location -LiteralPath $path
if($doInit)
{
Write-Host "Init Git for some reason?"
& git init
& git remote add origin "https://AzureDevops:`$(System.Accesstoken)@metropolisrpc.visualstudio.com:/Metropolis/_git/$repo"
}
else
{
& git remote set-url origin "https://AzureDevops:`$(System.Accesstoken)@metropolisrpc.visualstudio.com:/Metropolis/_git/$repo"
}
Write-Host "Resetting head..."
git clean -xdf
git reset --hard
Write-Host "Fetching commit..."
& git fetch origin $resourceCommit
if(-not $doInit)
{
Write-Host "Generating diff..."
& git diff HEAD..$resourceCommit --stat
}
& git checkout $resourceCommit
最佳答案
多个.pack
文件是正常的。当使用多包索引功能时,它们也应该非常高效(尽管它们显然会占用更多空间)。根据特定情况,它们甚至可能比单个包文件更高效(尽管我想在此处做出任何可靠的声明之前对此进行测量)。
要将多个包文件压缩为更少(甚至只有一个)包文件,请使用 git repack
或运行 git repack
的 git gc
> 为你。请注意,这样做的成本很高(如果没有其他的话,则需要花费 CPU 时间和能源),并且如果重新打包几乎没有什么好处,那么您就浪费了大部分费用。如果收获很多,那就值得了。
新奇的git maintenance
command可用于在没有其他事情发生时安排 git gc 操作。
Git 通常会自行运行 git gc --auto
,每当 Git 认为这有利可图时,它就会启动后台 git gc
。
关于git - 远程计算机上 git 中的多个包文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73562645/