如何找出要提交的文件的空间需求?

发布于 2024-10-20 17:36:30 字数 317 浏览 3 评论 0原文

我要归档一个包含大量垃圾的旧大型项目。我希望我永远不再需要它,但我想将所有重要的事情置于版本控制之下。由于项目混乱,很难说出什么是来源以及什么可以消失(没有 makefile,没有 make clean,什么都没有)。 所以我想把几乎所有内容都放在那里,只考虑排除最大的文件。

如何列出要提交(或暂存)的文件及其大小?

我可以编写一个脚本或其他东西,但希望有一个更简单的解决方案。我在 Cygwin 下工作,唯一可用的 gui 是 git gui ,它不显示文件大小。否则它就非常适合我的需要。

I'm going to archive an old huge project containing a lot of garbage. I hope I'll never need it again, but I want to put all important things under version control. Because of the chaos in the project, it's not easy to say what are the sources and what can go away (there's no makefile, no make clean, nothing). So I'd like to put there nearly everything and consider only the largest files for exclusion.

How can I list the files to be committed (or to be staged) together with their size?

I could write a script or whatever, but hope for a simpler solution. I'm working under Cygwin and the only gui available is git gui which doesn't show the file sizes. Otherwise it'd be perfect for what I need.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风月客 2024-10-27 17:36:30

你可以试试这个。它找到所有大于 1M 的文件,并将它们从最大到最小排序。打印的文件大小以字节为单位:

cd ~/files_to_archive
find . -type f -size +1M -printf '%s %p\n' |sort -nr

输出:

74751072 ./linux-2.6.38-rc4.tar.bz2
34686037 ./git-source.tar.gz
14026384 ./Python-2.7.tar.gz

更新:循环 find 返回的文件并打印其 git 状态:

git ls-files -t `find . -type f -size +1M |xargs`

You could try this. It finds all files larger than 1M and sorts them from largest to smallest. The file sizes printed are in bytes:

cd ~/files_to_archive
find . -type f -size +1M -printf '%s %p\n' |sort -nr

Output:

74751072 ./linux-2.6.38-rc4.tar.bz2
34686037 ./git-source.tar.gz
14026384 ./Python-2.7.tar.gz

Updated: loop over the files returned by find and print their git status:

git ls-files -t `find . -type f -size +1M |xargs`
江南烟雨〆相思醉 2024-10-27 17:36:30

如果您已经添加了文件,则可以在 git 中使用命令 ls-files。可以通过各种巧妙的方式传输输出以获得您所需要的内容。 https://git-scm.com/docs/git-ls-files

我建议在第一个大 git add 之前设置一个 .gitignore 文件以通配符去掉任何明显的文件。

使用 -s 开关列出暂存项目,仅获取文件路径,然后使用 du 获取文件大小:

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -ch 

从 du 中删除 human 会留下 kb 中的所有值。这允许使用排序,将最大的放在底部:

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n

然后可以使用输出来删除大的文件

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n

然后使用 git reset删除问题文件。
获取输出,您可以决定要删除的行(这可以做得更聪明,但只需获取尾部的行数,然后删除头部的总数)。

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n | tail -7 | head -6 | awk -F' ' '{ print $2 }' | xargs git reset

If you've already added the files, within git is the command ls-files. The output can be piped in various clever ways to get what you need. https://git-scm.com/docs/git-ls-files

I would suggest setting up a .gitignore file to wildcard out any obvious ones before the first big git add.

Using the -s switch to list the staged items, get just the file paths, and then uses du to get the file size:

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -ch 

Removing human from du leaves all the values in kb. Which allows sort to be used, putting the largest at the bottom:

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n

The output could then be used to remove large ones

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n

To then remove problem files use the git reset <file>.
Taking the output, you can decide the rows to remove (this could be done cleverer, but just took the number of rows with tail, and then removed the total with head).

git ls-files -s | awk -F' ' '{ print $4 }' | xargs du -c | sort -n | tail -7 | head -6 | awk -F' ' '{ print $2 }' | xargs git reset
浅笑依然 2024-10-27 17:36:30

初步估计,目录树顶部的 du -sk . 将为您提供所需的空间。在执行 git gc 后,它可能会被高估。

但早在项目退役之前,您就应该使用版本控制。

To a first approximation, du -sk . at the top of the directory tree will give you the space needed. After you do git gc, it might be an overestimate.

But you should have been using version control long before you reached the point of retiring the project.

调妓 2024-10-27 17:36:30

我不了解 Git,但如果您使用 Mercurial,您可以组合使用:

ls -laS
hg status

I don't know about Git, but if you're using Mercurial, you could use a combination of:

ls -laS
hg status
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文