2

我在生产服务器上有一个裸 git 存储库,仅用于从本地存储库部署一个简单的git push prod.

到目前为止一切正常,git 存储库只有几百 MB,但我对存储库不受服务器限制地增长的想法感到不舒服。

有没有办法删除裸仓库中的旧文件,或者我应该完全更改我的部署配置?

4

5 回答 5

1
#!/bin/bash
set -o errexit

# Author: David Underhill
# Script to permanently delete files/folders from your git repository.  To use 
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2

if [ $# -eq 0 ]; then
    exit 0
fi

# make sure we're at the root of git repo
if [ ! -d .git ]; then
    echo "Error: must run this script from the root of a git repository"
    exit 1
fi

# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD

# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune

来自:http ://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/

我猜这个页面包含了完全按照您的需要进行操作的说明。但是您需要复制并运行显示的脚本。 意识到!也看评论!

于 2013-04-28T00:26:05.003 回答
1

也许您可以从服务器中删除一些不需要的标签和分支,然后运行git gc --aggressive​​.

请注意,没有有用的方法可以从打算从中克隆(例如与他人共享)的存储库中删除“旧”提交。像这样的切割历史(称为克隆)会使许多重要操作(如克隆、推送和获取)的 repo 无效,这与裸 repo的存在理由相矛盾。

于 2013-04-28T00:14:02.893 回答
1

大量使用的存储库最终会变得太大。

然而,“太大”并不意味着这些天文件大小太大。

更重要的是(在这种情况下)太大意味着后果,例如:

  • 更多加载到 gui git 工具中

  • 更多可以使用工具进行搜索,例如git grep(一个鲜为人知的超快速超级酷工具)

  • 使用搜索/查找时出现更多较旧的结果git log

老实说,我会考虑完全重新开始。是的,裸仓库。所以我会这样做:

cp your project project_4_28_2913 # So this history is still kept
cd your_project
rm -r .git
git init

这可能不适用于要求将所有历史记录在线保存在同一个存储库中的某些项目。然而,在实际的现实世界就业中,我发现需要返回一两天以上查看较旧的 git 提交实际上非常罕见,并且查看超过一两周的提交发生少数一年(比如 4 人团队少于 6 次)。
这当然是一种平衡,最终发现在某个合适的时间点一个干净的新仓库,保存旧的仓库,对我来说效果最好。

这种方法也很快,时间就是金钱,因此,虽然其他方法更细粒度和精确,但您始终需要考虑您希望在这些流程上花费多少时间,而不是致力于使您的组织变得可交付的功能钱。

于 2013-04-28T15:36:48.167 回答
1

如果 repo 有几百 MB 并且你没有任何大文件,那么就出了问题。也许有人在过去编写了一个您可能希望从历史记录中删除的大文件。在此处查看如何查找此类文件:Find files in git repo over x MB, that doesn't exist in HEAD

你的回购规模不应该是一个问题——无论是现在还是未来。作为比较:git 源代码库包含 34251 次提交,大小为 57MB。linux 内核的存储库大小为 700MB(内核的工作副本为 500MB)。

除了重写你的历史来删除大文件之外,没有办法缩小 git 存储库。因为那不应该是必要的。

于 2013-04-28T10:40:33.893 回答
0

作为“PuppetGit”的一部分,我实现了一个脚本,它查看旧的提交并通过(ab)使用移植工具来修剪它们。

在 ppg-push-reports 中查看 ppg 的代码。位于http://repo.or.cz/w/puppet-git.git/的 Git 仓库

我是早期 git 黑客小组的一员(我编写或维护了几个导入程序以简化从其他 SCM 的迁移),所以我知道一些关于工具 git 的事情。我不是万无一失的,所以要小心使用。

嗯!〜马丁

于 2013-05-20T19:15:12.667 回答