我有一个300 MB的git repo.我目前检出的文件重2 MB,git repo重298 MB.这基本上是一个仅限代码的回购,重量不应超过几MB.
最有可能的是,有人在某个时候偶然犯了一些重文件(视频,巨大的图像等),然后将它们删除......但不是从git中删除,所以我们有无用大文件的历史.如何在git历史记录中追踪大文件?有400多个提交,所以一个接一个将是耗时的.
注意:我的问题不是关于如何删除文件,而是如何在第一时间找到它.
我想通过ruby脚本从命令行运行blender,然后逐行处理blender给出的输出以更新GUI中的进度条.混合器是我需要读取的stdout的外部进程并不重要.
当blender进程仍在运行时,我似乎无法捕获blender正常打印到shell的进度消息,并且我尝试了几种方法.在搅拌机退出后,我似乎总是访问搅拌机的标准配置,而不是在它仍在运行时.
这是尝试失败的一个例子.它确实得到并打印了搅拌机输出的前25行,但只有在搅拌机过程退出后:
blender = nil
t = Thread.new do
blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1"
end
puts "Blender is doing its job now..."
25.times { puts blender.gets}
Run Code Online (Sandbox Code Playgroud)
编辑:
为了使它更清晰一点,调用blender的命令会在shell中返回一个输出流,指示进度(第1-16部分已完成等).似乎任何"获取"输出的调用都会被阻止,直到混合器退出为止.问题是如何在blender仍在运行时访问此输出,因为blender将其输出打印到shell.
我有一个Git存储库我存储随机的东西.大多是随机脚本,文本文件,我设计的网站等等.
我随着时间的推移删除了一些大型二进制文件(通常为1-5MB),它们会增加存储库的大小,这在修订历史中是不需要的.
基本上我希望能够做到..
me@host:~$ [magic command or script]
aad29819a908cc1c05c3b1102862746ba29bafc0 : example/blah.psd : 3.8MB : 130 days old
6e73ca29c379b71b4ff8c6b6a5df9c7f0f1f5627 : another/big.file : 1.12MB : 214 days old
Run Code Online (Sandbox Code Playgroud)
..然后能够查看每个结果,检查是否不再需要然后删除它(可能使用filter-branch)
我在索引中添加了一个文件:
git add somefile.txt
Run Code Online (Sandbox Code Playgroud)
然后我得到了这个文件的SHA1:
git hash-object somefile.txt
Run Code Online (Sandbox Code Playgroud)
我现在有一个SHA1,我想使用SHA1检索索引中对象的文件名.
git show 5a5bf28dcd7944991944cc5076c7525439830122
Run Code Online (Sandbox Code Playgroud)
此命令返回文件内容,但不返回文件名.
如何从SHA1获取完整的文件名和路径?
例如,https://github.com/vanillaforums/Garden是GitHub存储库.但我只想https://github.com/vanillaforums/Garden/tree/master/plugins在存储库中"监视"此目录.
我怎么做?似乎没有办法.
所以,让我在这个问题前面说,我知道以前有关Stackoverflow主题的问题.事实上,我已经尝试了所有可以找到的解决方案但是我的仓库中有一个二进制文件,只是拒绝被删除并继续大大膨胀我的仓库大小.
方法我试过,
这两个都是由Darhuuk 完全从git repo中删除文件的答案推荐的
但是,在尝试这两种解决方案之后,在git中查找大文件的脚本仍然会找到违规的二进制文件.但是,此答案中的脚本不再找到二进制文件的提交.这个答案都提出了这两个脚本.
在尝试移除后,回购仍然是44mb,这对于相对较小的源来说太大了.大文件脚本正在做哪些工作正常工作.我已经尝试过推到github(我做了一个叉子以防万一),然后做一个新的克隆,看看回购大小是否减少,但它仍然是相同的大小.
有人可以解释我做错了什么或建议替代方法吗?
我应该注意到,我不仅仅想从我的本地仓库修剪文件,我还希望能够在Github上修复远程仓库.
这是对这个问题的后续行动.
如果有多个blob具有相同的内容,它们只会在git存储库中存储一次,因为它们的SHA-1将是相同的.如何找到给定树的所有重复文件?
您是否必须遍历树并查找重复的哈希值,或者git是否提供每个blob的反向链接到引用它的树中的所有文件?
我有一个脚本,可以从远程服务器上的git存储库中复制一些文件.对于每个复制的文件,如果它受版本控制,我想生成一行,如:
Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>
Run Code Online (Sandbox Code Playgroud)
我们的想法是将这些行存储在一个文件中,并将其复制到远程服务器上.这样我总是可以知道服务器上的哪个文件属于我的git存储库中的哪个提交.有快速的方法吗?
我想要摆脱一大块斑点!我以为我使用这个解决方案删除了文件:http:
//dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
(我用过-- --all而不是HEAD删除文件从所有分支机构)
rm -rf .git/refs/original/ && git reflog expire --all &&
git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)
我通过这个看了包文件夹为什么我的git存储库这么大?
$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n
... last 4 lines:
bc7ae9801052180b283cd81880753549f0f92587 blob 19464809 749446 305054873
acd5f09a35846bec25ebc324738139e5caabc50f blob 294278199 71381636 39607483
986d152935434b56cf182d8a32e24cb57af75ac3 blob 480385718 108184804 110989119
ba9d1d27ee64154146b37dfaf42ededecea847e1 blob 761172819 27430741 277589990
Run Code Online (Sandbox Code Playgroud)
该脚本git-find-blob取自哪个提交有这个blob?
$ ./git-find-blob ba9d1d27ee64154146b37dfaf42ededecea847e1
Run Code Online (Sandbox Code Playgroud)
但它没有找到任何东西.
任何想法如何摆脱我的存储库?
我们如何在每次推送时使用git更改版本(每个+1)?
例如我有一个2 php文件
libs/lib1.php
libs/lib2.php
Run Code Online (Sandbox Code Playgroud)
在每个标题上通常都有一些信息
/**
* LIB1.PHP
* this libs does something like this
* and that this is a doc for you
* @version 145
* @todo something todo
* @author DAMS
*/
/**
* LIB2.PHP
* this libs does something like this
* and that this is a doc for you
* @version 445
* @todo something todo
* @author DAMS
*/
Run Code Online (Sandbox Code Playgroud)
每次推送时我们可以搜索并添加+1版本吗?