git repo下有几十个文件夹;但我只与其中一人合作。所以,我不想知道其他文件夹下的项目发生了什么。 我从远程检查了一个分支,启用了稀疏结账,现在我只在本地有一个文件夹;但是在使用gitk时我仍然可以看到完整的提交历史记录。在交互式rebase期间进行一些更改时我也会看到它。
我的问题是:是否有可能以某种方式清理(过滤)提交历史记录,以便在重新定位时只看到与特定文件夹相关的文件?想法是使用repo,就像它只包含一个文件夹一样。
由于
答案 0 :(得分:2)
对于读取操作,您通常可以通过传递路径选项来获得所需的内容。
git log -- ./the_one_folder
或
gitk -- ./the_one_folder
但对于写入的操作,例如rebase,没有通用的方法来执行您描述的操作。如果您将所有内容都提交给一个大历史记录,那么该历史记录本质上是每个提交的一部分。因此,您有一个更改the_one_folder
的提交,即使其父级没有更改父级属于提交的同一文件夹中的任何内容,并且您无法进行变更"虽然它没有"。
你可以做一个降低你不关心的所有提交的rebase,但是那些提交会从你重新定位的分支中删除。所以基本上你必须为你的目录设置一组分支,并为下一个目录工作的下一个目录提供一组分支,并且不断开启。
一旦你这样做,它开始看起来你应该把每个项目放在自己的回购中。这是事实。在git中,你不应该把一堆项目塞进同一个回购中。如果你有时确定项目之间的变化,有办法解决这个问题;但这听起来至少大部分时间都是独立的,所以如果你不想要一堆杂乱的历史,你应该考虑转向单独的回购。
有一种方法可以创建"仅仅是您的项目" - 意识到这只有在你真正迁移到单独的repos(或者至少是单独的命名空间的refs集,但这只是一种更复杂的方式来做同样的事情,为什么呢?)时才真正有用。因为一旦完成对单独历史记录的更改将不再反映在合并历史记录中。
git filter-branch --subdirectory-filter the_one_folder --prune-empty -- --all