<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Reduce repository size > 原文:[https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html](https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html) * [Purge files from repository history](#purge-files-from-repository-history) * [Purge files from GitLab storage](#purge-files-from-gitlab-storage) * [Repository cleanup](#repository-cleanup) * [Storage limits](#storage-limits) # Reduce repository size[](#reduce-repository-size "Permalink") 隨著時間的流逝,Git 存儲庫變得越來越大. 將大文件添加到 Git 存儲庫后: * 由于每個人都必須下載文件,因此獲取存儲庫的速度變慢. * 它們占用服務器上的大量存儲空間. * [可以達到](#storage-limits) Git 倉庫的存儲限制. 重寫存儲庫可能會刪除不需要的歷史記錄,從而使存儲庫更小. [`git filter-repo`](https://github.com/newren/git-filter-repo)是用于快速重寫 Git 存儲庫歷史記錄的工具,建議同時使用以下兩種工具: * [`git filter-branch`](https://git-scm.com/docs/git-filter-branch). * [BFG](https://rtyley.github.io/bfg-repo-cleaner/). **危險:**重寫存儲庫歷史記錄是一種破壞性操作. 在開始之前,請確保備份您的存儲庫. 備份存儲庫的最佳方法是[導出項目](../settings/import_export.html#exporting-a-project-and-its-data) .**注意:** Git LFS 文件只能由管理員使用[Rake 任務](../../../raketasks/cleanup.html)刪除. [計劃](https://gitlab.com/gitlab-org/gitlab/-/issues/223621)消除此限制. ## Purge files from repository history[](#purge-files-from-repository-history "Permalink") 為了使克隆項目更快,請重寫分支和標簽以刪除不需要的文件. 1. 使用受支持的程序包管理器或從源代碼[安裝`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . 2. 使用`--bare`克隆存儲庫的新副本: ``` git clone --bare https://example.gitlab.com/my/project.git ``` 3. 使用`git filter-repo` ,從存儲庫的歷史記錄中清除所有文件. 要清除大文件,可以使用`--strip-blobs-bigger-than`選項: ``` git filter-repo --strip-blobs-bigger-than 10M ``` 要清除使用 Git LFS 存儲的大文件,可以使用`--blob--callback`選項. 下面的示例使用回調從 Git LFS 指針讀取文件大小,并刪除大于 10MB 的文件. ``` git filter-repo --blob-callback ' if blob.data.startswith(b"version https://git-lfs.github.com/spec/v1"): size_in_bytes = int.from_bytes(blob.data[124:], byteorder="big") if size_in_bytes > 10*1000: blob.skip() ' ``` 要按路徑清除特定的大文件,可以組合使用`--path`和`--invert-paths`選項: ``` git filter-repo --path path/to/big/file.m4v --invert-paths ``` 有關更多示例和完整文檔,請參見[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文檔. 4. 運行`git filter-repo`會刪除所有遙控器. 要為您的項目還原遙控器,請運行: ``` git remote add origin https://example.gitlab.com/<namespace>/<project_name>.git ``` 5. 強制推送更改以覆蓋 GitLab 上的所有分支: ``` git push origin --force --all ``` [受保護的分支](../protected_branches.html)將導致此操作失敗. 要繼續,您必須刪除分支保護,推送,然后重新啟用受保護的分支. 6. 要從標記的發行版中刪除大文件,請強制將更改推送到 GitLab 上的所有標記: ``` git push origin --force --tags ``` [受保護的標簽](../protected_tags.html)將導致此操作失敗. 要繼續,您必須刪除標簽保護,推送,然后重新啟用受保護的標簽. 7. 手動執行[項目整理](../../../administration/housekeeping.html#manual-housekeeping) **注意:**為提高性能而緩存了項目統計信息. 您可能需要等待 5 到 10 分鐘才能看到存儲利用率下降. ## Purge files from GitLab storage[](#purge-files-from-gitlab-storage "Permalink") 要減少 GitLab 中存儲庫的大小,必須刪除 GitLab 內部引用以包含大文件的提交. 在完成這些步驟之前,請[從存儲庫歷史記錄中清除文件](#purge-files-from-repository-history) . 除了[分支](branches/index.html)和標簽(這是一種 Git 引用)之外,GitLab 還會自動創建其他引用. 這些引用可防止在查看合并請求時死鏈接到提交或丟失差異. [存儲庫清理](#repository-cleanup)可用于從 GitLab 中刪除它們. 以下內部參考文獻不做廣告: * `refs/merge-requests/*`用于合并請求. * `refs/pipelines/*` for [pipelines](../../../ci/pipelines/index.html#troubleshooting-fatal-reference-is-not-a-tree). * `refs/environments/*`用于環境. 這意味著在獲取時通常不包含它們,這使得獲取速度更快. 另外, `refs/keep-around/*`是隱藏的 refs,以防止與討論相關的提交被刪除并且根本無法被獲取. 但是,可以從項目導出內的 Git 捆綁包訪問這些引用. 1. 使用受支持的程序包管理器或從源代碼[安裝`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) . 2. [從項目中](../settings/import_export.html#exporting-a-project-and-its-data)生成一個新的[導出](../settings/import_export.html#exporting-a-project-and-its-data)并下載. 3. 使用`tar`解壓縮備份: ``` tar xzf project-backup.tar.gz ``` 這將包含一個由[`git bundle`](https://git-scm.com/docs/git-bundle)創建的`project.bundle`文件. 4. 從包中克隆存儲庫的新副本: ``` git clone --bare --mirror /path/to/project.bundle ``` 5. 使用`git filter-repo` ,從存儲庫的歷史記錄中清除所有文件. 因為我們正在嘗試刪除內部引用,所以我們將依靠每次運行生成的`commit-map`來告訴我們要刪除哪些內部引用. **注意:** `git filter-repo`每次運行都會創建一個新的`commit-map`文件,并覆蓋前一次運行的`commit-map` . **每次**運行都將需要此文件. 每次運行`git filter-repo`都要執行下一步. 要清除所有大文件,可以使用`--strip-blobs-bigger-than`選項: ``` git filter-repo --strip-blobs-bigger-than 10M ``` 要按路徑清除特定的大文件,可以組合使用`--path`和`--invert-paths`選項. ``` git filter-repo --path path/to/big/file.m4v --invert-paths ``` 有關更多示例和完整文檔,請參見[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文檔. 6. 運行[存儲庫清理](#repository-cleanup) . ## Repository cleanup[](#repository-cleanup "Permalink") 在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19376) . 倉庫清理允許您上傳對象的文本文件,并且 GitLab 將刪除對這些對象的內部 Git 引用. 您可以使用[`git filter-repo`](https://github.com/newren/git-filter-repo)生成對象列表(在`commit-map`文件中),該對象列表可與存儲庫清理一起使用. 要清理存儲庫: 1. 轉到存儲庫的項目. 2. 導航 **設置>存儲庫** . 3. 上載對象列表. 例如,一個`commit-map`文件. 4. Click **開始清理**. 這將: * 刪除所有對舊提交的內部 Git 引用. * 針對存儲庫運行`git gc` . 完成后,您將收到一封電子郵件. When using repository cleanup, note: * 項目統計信息已緩存. 您可能需要等待 5 到 10 分鐘才能看到存儲利用率下降. * 客房部修剪 2 周以上的松散物品. 這意味著在最近 2 周內添加的對象將不會立即刪除. 如果您有權訪問[Gitaly](../../../administration/gitaly/index.html)服務器,則可以運行`git gc --prune=now`立即修剪所有松散的對象. * 此過程將從 GitLab 的緩存和數據庫中刪除一些重寫提交的副本,但是覆蓋范圍仍然存在許多空白,并且某些副本可能會無限期地存在. [清除實例緩存](../../../administration/raketasks/maintenance.html#clear-redis-cache)可能有助于刪除其中的一些[實例](../../../administration/raketasks/maintenance.html#clear-redis-cache) ,但出于安全考慮,不應依賴它! ## Storage limits[](#storage-limits "Permalink") 儲存庫大小限制: * 可以[由管理員](../../admin_area/settings/account_and_limit_settings.html#repository-size-limit-starter-only)在自我管理實例上設置. * Are [set for GitLab.com](../../gitlab_com/index.html#repository-size-limit). 當項目達到其大小限制時,您不能: * 推送到項目. * 創建一個新的合并請求. * 合并現有的合并請求. * 上載 LFS 對象. 您仍然可以: * 創造新問題. * 克隆項目. 如果超出存儲庫大小限制,則可以嘗試: 1. 刪除一些數據. 2. 進行新的提交. 3. 推回存儲庫. 也許您還可以: * 將一些斑點移到 LFS. * 從歷史記錄中刪除一些舊的依賴項更新. 不幸的是,該工作流程無法正常工作. 實際上,在提交中刪除文件并不會減小存儲庫的大小,因為早期的提交和 Blob 仍然存在. 您需要做的是重寫歷史記錄. 我們建議使用開源社區維護的工具[`git filter-repo`](https://github.com/newren/git-filter-repo) . **注意:**在 GitLab 端運行`git gc`之前,"已刪除"的提交和 blob 仍將存在. 您還必須能夠將重寫的歷史記錄推送到 GitLab,如果您已經超過最大大小限制,則可能無法實現. 為了解除這些限制,自我管理的 GitLab 實例的管理員必須增加對超出它的特定項目的限制. 因此,最好始終主動保持在限制之下. 如果您達到了極限,并且無法暫時提高極限,則唯一的選擇是: 1. 在本地修剪所有不需要的東西. 2. 在 GitLab 上創建一個新項目,然后開始使用它. **Caution:** This process is not suitable for removing sensitive data like password or keys from your repository. Information about commits, including file content, is cached in the database, and will remain visible even after they have been removed from the repository.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看