2011-03-28 61 views
3

我为我的点文件使用git仓库,除了部分文件(其中有一些标识符)之外,我想分享它。 有没有办法做到这一点,而无需创建另一个只有共享文件的git仓库?只分享git仓库的一个子集

非常感谢您的回答。

回答

2

否。库的每个提交包含提交的所有文件,因此过滤的视图将具有不同的提交标识符。

你可以使用类似git filter-branch的东西,但是这实际上会创建一个分支的副本,为每个原始提交(如果没有被过滤掉)创建一个新的提交。

可能有一种方法可以自动执行此操作,因此您的分支总是看起来与原始分支完全相同,但没有关键文件。然后,您只会将过滤的分支推送到某个公共存储库。

但是请注意,将基于此存储库的更改合并到原始存储库中并不容易,并且可能意味着将每个补丁应用于各个补丁。

+0

谢谢你的确切答案。我不认为我会这样做,我正在寻找一些简单且易于维护的东西。 – koral 2011-03-29 11:32:22

0

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

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

+0

好吧,除非我错了,否则这只会从存储库中删除所有重要文件,而我希望它们仍然是版本化的。 – koral 2011-03-29 11:34:12

1

您需要创建子模块并共享该子模块。

+0

这看起来更像我期待的,谢谢。我正在阅读有关git子模块的内容,如果有的话,我会回来提问。 – koral 2011-03-29 11:40:12

+0

如果你要用子模块做很多工作,可以考虑git slave。另外,如果您感觉符合要求,请查看子树合并。它可能比你需要的更复杂。 – 2011-05-01 18:24:17