仅共享 Git 存储库的子集

3

我使用 Git 存储我的 dotfiles(指操作系统的配置文件),想要分享它,但其中有些文件不希望被分享(比如包含一些标识符)。有没有办法在不创建另一个仓库的情况下实现这个需求?

谢谢您提前的回答。

3个回答

2
不行。仓库的每个提交都包含提交的所有文件,因此过滤视图将具有不同的提交标识符。
您可以使用类似于git filter-branch这样的工具,但实际上它会创建一个分支的副本,为每个原始提交创建一个新提交(如果没有被过滤掉)。
可能有一种自动化的方法,使您拥有一个分支,它始终看起来与您的原始分支相同,但是没有关键文件。然后,您只需将过滤后的分支推送到某个公共存储库中。
但请注意,将基于此存储库的更改合并回您的原始存储库并不容易,并且很可能意味着为每个更改应用单独的补丁。

感谢您提供精确的答案。我不认为我会这样做,我正在寻找简单易维护的东西。 - koral

1
你需要创建一个子模块并分享它。

这看起来更像是我期望的,谢谢。我正在阅读有关Git子模块的内容,如果有问题,我会再回来问的。 - koral
如果你要经常使用子模块,考虑使用 git slave。另外,如果你感觉自己能力足够,可以看看 sub tree 合并。不过这可能比你需要的更复杂。 - Adam Dymitruk

0

假设您不需要存储其他的点文件,只需将您不想共享的文件添加到.gitignore文件中。在第一次提交之前这样做,这些文件就不应该成为存储库的一部分。

如果您已经存储了您的点文件,那么只需将您不想共享的文件复制到其他目录中。对于每个您不想共享的文件,请运行git rm .some_file以将其从存储库中删除。将它们添加到gitignore中,然后提交并将它们从另一个目录复制回来。


嗯,除非我错了,否则这只会从存储库中删除所有关键文件,而我希望它们仍然有版本控制。 - koral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接