繁体   English   中英

为本地浅拷贝切换 git 标签/分支

[英]Switching git tags/branches for a local shallow copy

我正在尝试在本地浅 git 存储库中从一个标签/分支切换到另一个。 然而,我注意到一些奇怪的行为。

# Initial creation of the repository

git init localrepo
git fetch --no-tag --depth 1 <repo-url> <branch/tag>
git checkout -b shallow --no-track FETCH_HEAD

# Switching to a new branch/tag

git fetch --no-tag --depth 1 <repo-url> <branch/tag>
git reset --hard FETCH_HEAD

我不确定这是否是正确的方法——但我注意到了一些奇怪的事情。 在文件.git/shallow中,当我切换到新的分支/标签时,修订开始堆积。

有没有办法以某种方式重置 ```.git/shallow`` 文件,还是缺少其他东西?

默认情况下,Git 克隆整个存储库,因此具有所有对象的完整列表。 使用浅克隆,存储库包含对一个或多个浅点的修订,并且您使用的方法会创建一个新的浅点。

因此,您所看到的是 Git 正在跟踪在每种情况下,它仅将对象返回到那些浅点。 如果您删除了浅点,您的存储库将丢失它应该拥有的对象,因此您不想删除它们。

Git 并非旨在删除被引用的对象,因此只要您的存储库(包括 reflog)中有引用这些对象的内容,它们就不会被修剪。 如果您迫切需要本地存储库尽可能小,则需要执行新的浅层克隆。 否则,当前的方法没有任何害处(除了获取浅层克隆的效率低下),您可能没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM