分享 git 仓库的部分文件夹/文件

3

我是一名Git新手,可能会错过一些显而易见的东西。

我的本地Git仓库的形式如下:

/.git
/Project-1/
/Project-2/
/Project-3/
/Project-4/
...
/Project-x/
...
/Project-y/
....
/Shared-Code/

每个项目都是主程序的插件。该程序的开发者希望在其产品发布中包含我的两个插件。为此,他们提供了一个Github存储库来存放我的代码。问题是,我只想上传/Project-x、/Project-y和/Shared-Code。
我已经在这里和其他地方查看过了,最接近的建议是我应该有2个存储库。我不介意有2个存储库。我甚至不介意它们是否保持相同的更改历史记录,尽管如果它们保持相同会更好。
我可以很容易地将/Project-x、/Project-y和/Shared-Code复制到新位置并创建一个新的存储库。我的问题是,复制还是使用符号链接更好?或者有没有更“Git”的方式来做到这一点?

Git 的方式是每个项目都有一个单独的仓库。例如,您可以使用 Git 子模块将其他仓库包含在超级仓库中。 - Félix Cantournet
听起来很有趣。那么共享的代码也会是一个单独的存储库吗?如果我将其移动到单独的存储库中,你有什么建议可以保留我的更改历史记录? - rpatters1
我会把共享代码放在某种库中,并将其版本化在单独的 git 存储库中。然后,可以使用 git-submodule 将此 git 存储库包含在应用程序存储库中。如果您想基于目录拆分现有存储库并保留历史记录,则需要 git filter-branch。我建议您搜索 stackoverflow,那里有几个非常好的答案。 - Félix Cantournet
提示:最优解取决于许多因素。这是一种普遍的方法。 - Félix Cantournet
1个回答

1

你可以使用 git子模块 来实现。

当然,你也可以创建 .gitignore 文件来忽略其他文件夹并阻止接收者(或您自己)访问它们,如 gitignore文档 所示:

如果模式以斜杠结尾,则会被删除以便于以下描述,但它只会与目录匹配。换句话说,foo/ 将匹配目录 foo 和其下的路径,但不会匹配常规文件或符号链接 foo(这与 Git 中 pathspec 的一般工作方式是一致的)。


我确实阅读了有关Git子模块的文档,但我无法确定如何从当前格式转换为使用子模块。似乎我想要走相反的方向。因为我是新手,所以我真的需要一个ELI5。 - rpatters1

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