git 如何找出要提交档案的空间需求?

cedebl8k  于 2023-08-01  发布在  Git
关注(0)|答案(4)|浏览(118)

我将归档一个包含大量垃圾的旧的大型项目。我希望我永远不会再需要它,但我想把所有重要的东西都放在版本控制之下。由于项目中的混乱,很难说清哪些是源代码,哪些可以删除(没有makefile,没有make clean,什么都没有)。* 所以我想把几乎所有的东西都放在那里,只考虑排除最大的文件。*
我怎样才能列出要提交(或暂存)的文件及其大小?
我可以写一个脚本或任何东西,但希望有一个更简单的解决方案。我在Cygwin下工作,唯一可用的gui是git gui,它不显示文件大小。否则它会是完美的我所需要的。

jexiocij

jexiocij1#

你可以试试这个它查找所有大于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`

h6my8fg2

h6my8fg22#

首先,目录树顶部的du -sk .将给予所需的空间。在执行git gc之后,可能会高估。
但是,在项目退役之前很久,您就应该使用版本控制了。

deyfvvtc

deyfvvtc3#

如果你已经添加了这些文件,在git中有一个命令ls-files。输出可以通过各种巧妙的方式来获得所需的内容。https://git-scm.com/docs/git-ls-files
我建议在第一次大的git添加之前设置一个.gitignore文件来通配符化任何明显的。
使用-s开关列出暂存项,仅获取文件路径,然后使用du获取文件大小:

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

字符串
从du中删除human会留下kb中的所有值。它允许使用sort,将最大的放在底部:

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 <file>删除问题文件。获取输出,您可以决定要删除的行(这可以做得更聪明,但只是取尾的行数,然后删除头的总数)。

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

2ic8powd

2ic8powd4#

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

ls -laS
hg status

字符串

相关问题