簡體   English   中英

git:在拉取時保持深度=1以減少回購大小

[英]git: keep depth=1 on pulls to reduce repo size

有沒有辦法讓git pull keep depth=1 ,只使用最新的提交,而不是 git 克隆的那個(如果有更新的)?

我做git clone -b some_branch --depth=1 git_repo.git

它以最少的空間使用克隆存儲庫,因為它刪除了所有歷史記錄。 現在,如果我需要再次更新該存儲庫並使用git pull ,它會拉取整個歷史記錄。

這里有一個類似的問題:

使用 --depth 1 克隆后使用 git 提取更新

如果嘗試接受答案建議並使用git pull --unshallow然后使用git pull --depth=1 ,看起來它不會像git clone --depth=1那樣減少空間。

所以真正減少存儲庫大小的唯一方法是刪除存儲庫並再次使用depth=1克隆?。 看起來有點笨拙。

我需要這個的原因是完全克隆時會使用存儲庫,目前大約需要~3 GB的大小。 大約有 40 個環境使用它。 所以總的來說,它占用了很多空間。 使用淺克隆,它可以減少大約 5 倍。

樣本:

克隆此存儲庫分支 12.0 git@github.com:odoo/odoo.git ,顯示其大小約為 3 GB。

使用depth=1克隆此存儲庫分支 12.0,顯示大小為 643 MB。

在拉動時使用--unshallow然后(如此處Converting git repository to shallow?所建議的那樣):

git pull --depth 1
git gc --prune=all

似乎不像淺克隆那樣縮小尺寸。

不幸的是,答案是“不”。 深度將提交放在.git/shallow文件中。 當檢索提交歷史時,您的請求將停止在淺文件中的提交,但如果有合並到當前分支,它將跟隨那個和它后面的整個歷史。 從我的博客文章Exploring Git Clone --depth 中

如果你有一個分支結構,當 main 位於c時,你做了一個git clone --depth=1

...  -  .  -  .  - [c] -  .  -  .  -  .  -  .  (main)
         \               /
           .  -  .  -  .  (xyz)

然后在g處進行提取,在 d 處進行合並將使您提取幾乎整個歷史記錄( b除外)。

1000’s of commits  -  a  -  .  - [c] -  d  -  e  -  f  -  g  (main)
                       \               /
                         x  -  y  -  z  (xyz)

上述中型博文給出了一些建議,但沒有回答你的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM