git - 稀疏 checkout 后过滤 git 提交历史

标签 git

git repo下有几十个文件夹;但我只和其中一个一起工作。所以,我不想知道其他文件夹下的项目发生了什么。 我从启用了稀疏 check out 的远程 check out 一个分支,现在我在本地只有一个文件夹;但我仍然可以在使用 gitk 时看到完整的提交历史记录。在交互式 rebase 期间进行一些更改时,我也会看到它。

我的问题是:是否有可能以某种方式清理(过滤)提交历史,以便我在 rebase 时只看到与特定文件夹相关的历史?想法是以与只包含一个文件夹相同的方式处理 repo。

谢谢

最佳答案

对于读操作,往往可以通过传递路径选项来得到你想要的。

git log -- ./the_one_folder

gitk -- ./the_one_folder

但是对于写的操作,比如 rebase ,没有通用的方法来做你描述的事情。如果您将所有内容都提交给一个大历史,那么该历史本质上就是每次提交的一部分。所以你有一个更改 the_one_folder 的提交,即使它的父级没有更改同一文件夹中的任何内容,父级是提交的一部分,你不能做一个 rebase “就好像它不是”那里”。

你可以做一个 rebase 来删除所有你不关心的提交,但是这些提交会从你正在 rebase 的分支中删除。所以基本上,您必须为您的目录设置一组分支,并为下一个人处理的下一个目录设置一组分支,等等。

一旦你这样做了,看起来你应该把每个项目放在它自己的仓库中。这是事实。在 git 中,你不应该将一堆项目塞进同一个 repo 中。如果您有时确实将跨项目的更改相关联,则有一些方法可以解决这个问题;但听起来至少在大多数情况下它们是独立的,所以如果您不想要一堆困惑的历史记录,您应该考虑转移到单独的存储库。

有一种方法可以创建“仅您的项目”的历史记录 - 意识到这只有在您确实迁移到单独的存储库(或至少是单独的命名空间引用集,但这是一种更复杂的方法)时才真正有用做同样的事情,为什么?)因为一旦完成,对单独历史的更改将不再反射(reflect)在组合历史中。

git filter-branch --subdirectory-filter the_one_folder --prune-empty -- --all

关于git - 稀疏 checkout 后过滤 git 提交历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180781/

相关文章:

git blame 使用 -L <n,m> 选项抛出一个错误的修订错误

git - 如何在运行 git filter-branch 后删除旧的历史记录?

python - Git 不提交文件

git - 如何将原始 GitHub 项目的分支克隆到您的复刻中?

git - 删除 git 子模块但保留文件

git - GIT 存储库的工作目录是什么?

git - 如何为 Qualcomm MSM 系统编译 Android 4.4.2?

git - 是否有将在分支删除后运行的 git Hook ?

git - 本地分支机构跟踪其他本地分支机构的用例是什么?

git:如何恢复已删除的文件?