![](/img/trans.png)
[英]Delete or remove all history, commits, and branches from a remote Git repo?
[英]Git: Is there a safe way to delete a branch, including all commits/history from it to restore original repo size
我有人要求使用Git一次性传输大型二进制文件(在2个人之间传输文件)。 他遇到了一些网络问题,无法使用标准工具(例如Dropbox,GDrive,Ftp等),但与我的Git存储库完全连接。
我对允许他这样做的最大担心是,这将增加我的回购规模。 即使他创建了一个新分支,使用二进制文件进行提交,并在另一方成功拉出该分支后将其删除,回购协议是否也不会保留与该提交相关的历史记录?
如果文件很大(100M),即使删除分支,我的仓库也不会增加那个数量吗? 我需要怎么做才能将仓库重新缩小到预先提交的大小?
一旦一些的所有引用提交(S)和其相关的文件(S)-really,-are了基本的Git对象(即那些提交去树木和斑点),对象符合垃圾收集。 但是, 只有在运行git gc
(或git prune
) 并且它们至少与“修剪时间”一样长的时候,它们才真正被收集。
默认修剪时间为两周,但是您可以使用git gc --prune=yesterday
或--prune=10.minutes.ago
或类似的方法来--prune=10.minutes.ago
修剪时间。 如果您将时间缩短,请确保没有人在存储库中创建新对象。
摆脱对各种Git对象的所有引用可能比看起来困难。 显而易见的是分支名称和标记名称。 这些引用名称通常还具有reflog ,并且HEAD
本身还有一个附加的reflog。 所有这些引用日志都包含引用,这些引用随后使对象保持活动状态。 删除分支名称(当前)将删除分支的引用日志,但HEAD
的引用日志中的名称仍保留。
缺省情况下,reflog条目本身将在90天后过期(对于可到达对象而言),而在30天(对于不 可达对象)将过期,而此可达性取决于相应引用的当前值。 如果对提交的唯一引用是在HEAD
引用日志中,并且HEAD
本身并未分离,那么该引用引用将指向无法到达的提交(根据定义:如果HEAD
附加到分支,则HEAD
仅包含分支名称,而我们已经表示没有分支名称指向提交本身,也没有指向提交的后代),因此仅适用较短的有效期。 您可以使用git reflog expire --expire-unreachable=...
进一步缩短它,使用与git gc --prune=...
相同的语法,尽管您当然会过期所有这些无法访问的reflog条目,除非您限制这到HEAD
(那么您将只剔除HEAD
的不可达条目)。
除了这些以外,还可以在特殊的*_HEAD
名称( ORIG_HEAD
, MERGE_HEAD
, CHERRY_PICK_HEAD
等)中进行CHERRY_PICK_HEAD
。 但是,对于这种特殊情况,这不太可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.