Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中永久删除提交(附件)?_Git_Git Annex_Datalad - Fatal编程技术网

如何在git中永久删除提交(附件)?

如何在git中永久删除提交(附件)?,git,git-annex,datalad,Git,Git Annex,Datalad,我已经开始在我的实验室中使用datalad(git附件的包装器)来控制版本数据和过期数据。它工作得很好,只是.git文件夹会悄悄地变得巨大,特别是在git历史中来回重复某些步骤时。例如,有时我做了一个提交,意识到我需要修复一些东西,所以用git reset HEAD ~回滚它,然后从那里做额外的提交。这将孤立以前是头部的提交,因此它不会出现在git日志中,但其所有相关文件仍将在附件中,如果您有提交sha,则仍然可以git显示它。如何永久删除这些孤立的提交,使它们及其关联的文件不会占用磁盘空间?我

我已经开始在我的实验室中使用datalad(git附件的包装器)来控制版本数据和过期数据。它工作得很好,只是.git文件夹会悄悄地变得巨大,特别是在git历史中来回重复某些步骤时。例如,有时我做了一个提交,意识到我需要修复一些东西,所以用
git reset HEAD ~
回滚它,然后从那里做额外的提交。这将孤立以前是头部的提交,因此它不会出现在
git日志中
,但其所有相关文件仍将在附件中,如果您有提交sha,则仍然可以
git显示它。如何永久删除这些孤立的提交,使它们及其关联的文件不会占用磁盘空间?我尝试了git-gc--prune=now--aggressive
,但似乎什么也没做

例如:

datalad创建测试
cd试验
#创建新分支
吉特分行
git签出tmp
#建立一个git历史记录以供使用
回声a>f
datalad save-ma
datalad运行-i-哦。bash-c“echo aa>f”
datalad运行-i-哦。bash-c“回声aaa>f”
#cat所有附件文件(符号链接指向的位置)
find.git/appendment/objects-type f | xargs-I{}cat{}
#打印出:
#a
#aaa
#aa
#删除最后2次提交
git重置—硬头~2
#从2次提交前进行另一次提交
datalad运行-i-哦。bash-c“echob>f”
#再次打印git附件的文件
find.git/appendment/objects-type f | xargs-I{}cat{}
#应该打印
#a
#aaa
#b
#aa
#尽管git重置很困难,但一切仍然存在
切换到主分支
吉特分行-D tmp
git gc--prune=now--aggressive
#再检查一下那里有什么
find.git/appendment/objects-type f | xargs-I{}cat{}
#即使删除了分支并运行git-gc,所有内容仍然在附件中!
在neurostars上解决:

git-gc
会注意从
.git/objects
中删除提交,但是
.git/appendment/objects
下的附件文件确实会持久存在。对于附加文件,您可以使用git Appendment unused查找在指定的参考中不再使用的附加文件(因此您可以在标记的“发布”之间删除中间步骤的数据),然后使用
git Appendment drop--unused
。 请注意,git附件分支仍将在其历史中保留这一点。因此,如果你要做上千次,它可能不是一个完整的解决方案,你可能会用
git-attraction-forget
来赞美它,完全忘记attraction的历史