BFG Repo Cleaner 的正确使用方法
Correct Usage of BFG Repo Cleaner
BFG Repo Cleaner 站点给出了使用该工具清理存储库的示例:
克隆您的存储库的新副本。
$ git clone --mirror git://example.com/some-big-repo.git
运行 BFG 来清理你的仓库。
$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
使用git gc 剥离不需要的脏数据
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
将更改推送回远程
$git push
我知道 head 分支是受保护的,因此 head 分支中任何大于 100M 的文件仍然存在。如果我 运行 按照描述使用此工具,我将丢失任何历史记录 所说的 100M 文件是否正确?因此,如果旧提交中有该文件的旧版本,它就消失了,我将无法在它以前的状态下使用它……对吗?
此外,我有一位同事说了以下内容,我想知道这是否属实:
如果您推回到 TFS 中镜像的存储库,则对您的包文件所做的更改将不会反映在远程和未来的克隆中
您必须在 TFS 中创建一个新的存储库并将镜像推送到那里,以便远程选择包文件更改。
任何仍然存在于 repo 头部的文件都将被保留,包括历史记录。这是为了保护你不犯错误。这个想法是您应该明确删除文件,提交删除,然后清理历史记录以将其删除。
TFS 没有 gc
它的 repos;你的同事是对的。请参阅 进行确认。
不久我还使用 BFG Repo Cleaner 从 TFS 的 git 存储库中删除了一些文件夹。
如果你还想修改头部,使用参数--no-blob-protection
显然,在清理过的(旧的)提交中,您清理过的文件丢失了。提交仍然存在,但每个相应的提交中都缺少该文件。您将无法查看文件历史记录。
出于安全原因,我总是会重命名旧的存储库并创建一个新的。甚至可能使用另一个回购名称,这样我的 co-workers 就不会将错误的回购合并到他们的工作副本中。
如果您确实需要,可以 git push --all -force
并重写 TFS 存储库中的完整历史记录。但是后来旧的历史就过去了。
BFG Repo Cleaner 站点给出了使用该工具清理存储库的示例:
克隆您的存储库的新副本。
$ git clone --mirror git://example.com/some-big-repo.git
运行 BFG 来清理你的仓库。
$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
使用git gc 剥离不需要的脏数据
$ cd some-big-repo.git $ git reflog expire --expire=now --all && git gc --prune=now --aggressive
将更改推送回远程
$git push
我知道 head 分支是受保护的,因此 head 分支中任何大于 100M 的文件仍然存在。如果我 运行 按照描述使用此工具,我将丢失任何历史记录 所说的 100M 文件是否正确?因此,如果旧提交中有该文件的旧版本,它就消失了,我将无法在它以前的状态下使用它……对吗?
此外,我有一位同事说了以下内容,我想知道这是否属实:
如果您推回到 TFS 中镜像的存储库,则对您的包文件所做的更改将不会反映在远程和未来的克隆中
您必须在 TFS 中创建一个新的存储库并将镜像推送到那里,以便远程选择包文件更改。
任何仍然存在于 repo 头部的文件都将被保留,包括历史记录。这是为了保护你不犯错误。这个想法是您应该明确删除文件,提交删除,然后清理历史记录以将其删除。
TFS 没有 gc
它的 repos;你的同事是对的。请参阅
不久我还使用 BFG Repo Cleaner 从 TFS 的 git 存储库中删除了一些文件夹。
如果你还想修改头部,使用参数--no-blob-protection
显然,在清理过的(旧的)提交中,您清理过的文件丢失了。提交仍然存在,但每个相应的提交中都缺少该文件。您将无法查看文件历史记录。
出于安全原因,我总是会重命名旧的存储库并创建一个新的。甚至可能使用另一个回购名称,这样我的 co-workers 就不会将错误的回购合并到他们的工作副本中。
如果您确实需要,可以 git push --all -force
并重写 TFS 存储库中的完整历史记录。但是后来旧的历史就过去了。