将部分git项目推送到另一个目的地

时间:2015-09-17 13:40:19

标签: git

我的项目example具有以下结构:

example
|-- A
|   `-- a.txt
|-- B
|   `-- b.txt
`-- xyz.txt

我将其推送到我的私人远程服务器A。现在我需要让example/B文件夹可供其他服务器上的其他人访问。

是否有一种简单的方法可以将文件夹example/B推送到其他远程B,而无需推送整个项目B?此外,它不应该中断我的正常工作流程,如果我在b.txt中更改了任何内容,则需要将其推送到A

2 个答案:

答案 0 :(得分:1)

你有几个选择,虽然每个都会引入一些开销。

Git子模块

没有人真的喜欢submodules,但他们为了这个目的而在Git中。将example/B拆分为自己的存储库,从example中删除该目录,然后将example/B存储库重新包含为example的子模块。

完成后,您将能够提交example/B个回购并推送到服务器B而无需项目的其余部分。在您更新子模块之前,example不会包含更改。

伪子模块

人们称之为假子模块,但实际上它只是将一个存储库嵌套在另一个存储库中。进入example/B并运行git init以创建全新的回购。 Git首先在当前目录中查找.git/,然后向父母求助,所以当你在example/B时,Git将在新的存储库中运行,当你进入时example,Git将在原始版本上运行。和以前一样,现在你可以提交example/B并将其推送到服务器B,而无需项目的其余部分。

此策略与实际子模块之间的区别在于,当您导航回example时,您必须再次将更改提交到主存储库。

其他想法

如果example/B足够独立,对服务器B感兴趣而没有主项目的其余部分,也许它根本不应该成为主项目的一部分。也许将它完全拆分成自己的项目然后将其作为当前项目的完全外部依赖包含在其中是有意义的。

答案 1 :(得分:0)

在其他地方的文件系统中创建一个链接到example / B,git init并将其连接到另一个目的地(作为远程)。

这不是git'ish,但我认为是实用的。这样你的“主项目”就不知道任何其他git存储库(.git文件夹必须在父文件夹中的某个位置,而不是直接在example / B中)。