繁体   English   中英

如何从目录中删除除未版本控制的 git 文件之外的所有文件?

[英]How to remove all but the unversioned git files from a directory?

我想把很多文件放在一个存储库中。 但是,它们的大小超过 10GB。 它们是很多文件。 总存储空间约为 13GB。

我正在考虑解决这个问题的方法。 现在我正在考虑创建一个单独的存储库,我可以在其中推送其余文件。 但是因为有很多文件,手动操作太繁琐了。

有什么方法可以查看哪些文件没有添加到 git 中(也许它们被称为未版本控制的文件)? 然后删除所有未添加的文件。 然后在同一个文件夹中初始化一个新的 repo 并将其余的推送到另一个存储库。

请让我知道这是否可行。 如果存在,我愿意在 git 周围使用 shell 或 python 包装器。

这些文件彼此无关,因此将它们保存在两个单独的存储库中并不是什么大问题。

要查找尚未提交的文件:

git status --porcelain --untracked-files --ignored

这将向您显示所有更改的文件路径,包括.gitignore文件路径,以及下降到目录中的文件路径。 如果您的 repo 中没有挂起的更改,这应该只是未跟踪/忽略的文件。 行的开头会有 3 个字符,例如?? 或者!! 代表你可以剥离的状态| cut -c 4- | cut -c 4-除非你想解析它们以区分不同的状态。

从那里 - 将这些文件移动到不同的目录会更容易(而不是移动所有其他文件)。

列出所有跟踪的文件

git ls-tree --full-tree -r --name-only HEAD

删除所有跟踪的文件:

git ls-tree --full-tree -r --name-only HEAD |
  xargs git rm

我的方法是纯粹使用 Git:

git status # Make sure you don’t have any change in already tracking files
cat .gitignore # If you ignore some files that you want to actually index, modify this file
git add . # Adding all untracked files
git commit # Take note of this commit hash, abcde123
cd ../another_new_repo
git init 
git fetch ../old_repo
git cherry-pick abcde123

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM