git - 远程计算机上 git 中的多个包文件

标签 git azure pipeline release

我在使用 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 repackgit gc > 为你。请注意,这样做的成本很高(如果没有其他的话,则需要花费 CPU 时间和能源),并且如果重新打包几乎没有什么好处,那么您就浪费了大部分费用。如果收获很多,那就值得了。

新奇的git maintenance command可用于在没有其他事情发生时安排 git gc 操作。

Git 通常会自行运行 git gc --auto,每当 Git 认为这有利可图时,它就会启动后台 git gc

关于git - 远程计算机上 git 中的多个包文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73562645/

相关文章:

git - 配置 IntelliJ IDEA 以始终忽略由 Maven Release Plugin 在 target/checkout 创建的 Git Roots

git 添加正则表达式示例

git - 如何通过一个简单的步骤将存储库中 *Foo* 的 *所有* 实例(内容、文件名和提交消息)批量替换为 *Bar*?

arrays - 在 Powershell 中内联创建和拆分数组两次

c - 将循环转化为算术以加速函数

git - 在网络上设置 Git 并复制到网站

azure - 如何删除源数据集 (JSON) 中的重复项并将数据加载到 azure 数据工厂中的 azure SQL DB

mysql - 使用 JDBC 连接器读取 Spark 中 MySQL 表的一部分

azure - 使用 Service Fabric 模板时出现错误的 dll 文件异常

linux - 管道是否修改了单词的分隔符?