簡體   English   中英

克隆git存儲庫而不保留本地修訂

[英]Clone git repository without keeping revisions locally

是否可以在git中克隆存儲庫而不保留所有修訂版本?

我的存儲庫很大(數十GB)。 我不想將工作副本中的存儲空間增加一倍。 我只想要這些文件,並且知道在何處進行推/拉更新。 甚至可以用git還是我需要返回到subversion?

您可以創建一個“淺”克隆,但是由於它既不能從其獲取也不可以推入其中,因此它成為只讀存儲庫。 這是命令: git clone repoUrl.git --depth 1 --branch branch_name

我認為最接近您的地方是使用--depth選項來git clone來限制獲取的歷史記錄數量。這也意味着您將無法使用git log和所有朋友的所有歷史git log - -並且您無法針對遠程存儲庫運行git log

也就是說,還有一些其他方面需要考慮。 Git確實嘗試將類似的對象打包在一起,在構建包時給予良好的壓縮。 這確實意味着文件本身在某種程度上需要相似。 這對於源代碼非常有用,但是對於某些二進制格式來說可能不太理想。

大文件的Git也不太好。 Git傾向於將整個文件加載到內存中,盡管已經做了一些努力來減少這種情況。 因此,您可能需要進行一些測試,以確保不會碰到任何邊緣。

是否可以在git中克隆存儲庫而不保留所有修訂版本?

由於沒有太多的紀律,您可以使用--reference信息庫在--reference倉庫中僅一個倉庫用於倉庫的較大,穩定的部分,其中“站點”被定義為“可以訪問公用共享文件系統的機器”。

要使其與共享文件系統一樣安全:

  1. 制作僅發布穩定參考的裸倉庫。 最簡單的方法是進行完整克隆,然后刪除所有不穩定的克隆。

    git clone --bare u://r/l/to/real/upstream /path/to/reference/repo
    cd !$
    git tag -d all the tags that have even a whiff of instability about them
    git branch -D every branch
    git rev-parse any-tag > HEAD

  2. 使用此倉庫作為參考。 當克隆真正的上游時,

    git clone --reference /path/to/reference/repo u://r/l/to/real/upstream

這實際上是在內部使用它的全部。 紀律部分是,您必須確保帶有倉庫的文件系統始終可用於引用它的任何人,並且對倉庫的任何更改都不會留下未引用的提交。 chmod -R aw可以很好地做到這一點。

如果人們以這種方式將克隆到筆記本電腦上並將其帶到無法訪問軟件倉庫的地方,那么他們需要先從倉庫斷開其克隆:

# disconnect from depot:
git repack -Ad \
&& rm .git/objects/info/alternates

筆記:

對於真正動力不足的筆記本電腦和非常大的倉庫,重新包裝可能不方便。 另一種方法是:

# disconnect from depots, minimal cpu load for underpowered localhost:
cp -r $(cat .git/objects/info/alternates) .git \
&& rm .git/objects/info/alternates

也可以使用git pack-objectsgit rev-list打包“隨便什么”來進行公路旅行。 這是一種實現方法:

# pack up what I have locally, mark it as reliably-present:

git repack -l
for pack in .git/objects/pack/*.pack; do 
    touch $pack.keep
done

# pack up everything I still don't have that might actually be useful
# no need to list tags that are ancestors of other tags here:

git rev-list --objects --all ^tag-I-dont-need ^another ^etc \
| git pack-objects --honor-pack-keep .git/objects/pack/pack
mv .git/objects/info/alternates{,.inaccessible}

# let git gc at what's here when needed
rm .git/objects/pack/pack-*.keep

然后返回折頁,將替代文件放回原處。

如果克隆將在同一文件系統卷上,則使用git clone --local

它使用硬鏈接來節省空間。

git-clone手冊頁中查找它。

這意味着您可以擁有完整的歷史記錄,而無需增加空間需求。

暫無
暫無

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

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