我在bitbucket上有一个使用LFS的存储库。自从使用它一段时间以来,我决定将存储库移回我控制的空间。我首先使用LFS的唯一原因是有效地将我的存储库大小限制加倍(因为LFS中的文件放在一个单独的存储桶中)但是现在我移动它,我不再需要这样做。
我需要一种方法来浏览整个git历史记录,删除git lfs所做的所有工作痕迹(因此所有文件都已提交,通常是#39;)。完成后,我打算强制推送到新的存储库。
我已经完成了相当多的搜索,遇到了suggested solutions,但我不了解如何实施/运行它们,因为它们是高级别的。
我如何挥手告别git lfs?
答案 0 :(得分:6)
如果你想离开LFS,但不是那么担心修复整个git历史记录,你可以做以下事情;
git lfs uninstall
touch **/*
git commit -a
这将卸载LFS支持,触摸每个文件(以便git识别出已更改)然后全部提交。如果你愿意,你可以更具体(例如,**/*.png
)。请注意,使用**
需要启用扩展的glob支持(bash上为shopt -s globstar
)
这对我有用 - 但它会引发很多错误(我认为我在每次提交文件时都没有将错误添加到LFS中)和需要很长时间(每次提交大约2-3秒)。
git lfs uninstall
git filter-branch -f --prune-empty --tree-filter '
git lfs checkout
git lfs ls-files | cut -d " " -f 3 | xargs touch
git rm -f .gitattributes
git lfs ls-files | cut -d " " -f 3 | git add
' --tag-name-filter cat -- --all
它卸载git LFS支持(理论上防止LFS搞乱索引)然后对于每次提交它确保LFS文件正确检出,然后触摸它们(所以git意识到它们已经改变),删除设置LFS在.gitattributes
中找到,因此在克隆时它不会继续尝试使用LFS,然后将真实文件添加到索引中。
完成上述操作后,您需要进行强制推动。当然,这会将处理你的repo的任何人扔进一个独立的头状态 - 所以在代码冻结期间这样做是明智的。之后,让每个人都做一个新的克隆可能是最容易的。
答案 1 :(得分:2)
git lfs migrate export
来自git lfs migrate help
:
导出
export 模式将Git历史记录中存在的Git LFS指针文件迁移出 Git LFS,将它们转换为相应的目标文件。
git lfs ls-files
验证您是否确实拥有LFS文件。filter=lfs
文件中删除所有.gitattributes
行。 .gitattributes
可以生活在任何地方,因此请确保全部找到它们,否则以后可能会导致迁移问题。.gitattributes
所做的任何更改。git status
没有任何更改。git lfs migrate export --everything --include .
git status
以确保您没有更改。如果您将.gitattributes
留给filter=lfs
,则可能现在不正确地进行了更改。git lfs ls-files
一起出现。filter=lfs
中删除所有.gitattributes
行。.git/hooks
目录中保留的LFS:预提交,后提交,签出后,合并。$GIT_TRACE=1
,应该没有...trace git-lfs: filepathfilter: accepting...
的迹象答案 2 :(得分:-1)
app.get('/', (req, res) => {
console.log("Someone hit localhost:5000/");
res.send('We have nothing to show yet, try to visit localhost:5000/auth/google');
});
删除文件/图案.gitattributes