0

我正在开发一个客户端-服务器应用程序,我想将两个项目(客户端和服务器)存储在 github 上的同一个 github 存储库中。我在 macOS 上。我使用 Eclipse git 插件为客户端项目创建了一个本地存储库,然后将其提交到 github。它工作得很好。

现在我想将服务器端项目添加到这个 Repo 中,可能在一个新的子文件夹中。这部分是在与客户端部分不同的工作空间上开发的。我尝试使用 Eclipse 共享项目,但它告诉我没有现有的 repo。我认为这是因为系统的两个部分是使用不同的 Eclipse IDE 开发的。

我试图在第一个下创建一个新的 repo,但它变得一团糟,因为 github 无法理解哪个是 master。我正在使用 GitHub 客户端应用程序来管理对远程存储库的提交。

有人可以帮助我吗?

谢谢

4

3 回答 3

2

它可能不会直接回答您的答案,但我认为这种特殊情况可以通过 Git 的submodules等功能来解决。

在这种情况下,无论如何,您需要在某个地方托管两个不同的存储库。但是在子模块的帮助下,你可以告诉 Git 一个 repo 的文件应该位于另一个 repo的目录树中。不会造成你描述的混乱!

例如,假设您将项目托管为github.com/user/Clientgithub.com/user/Serverrepos。转到Client存储库的文件夹并执行以下操作:

git submodule add git@github.com:user/Server.git src/server

这会将具有给定地址的 repo 克隆到您指定的文件夹中(src/server在本例中)。

之后,您必须提交更改。虽然添加了很多文件,但commit diff不会有很多变化:特殊文件中只有一个简短的记录,说这样的存储库现在是一个子模块。也就是说,Server实际上并没有存储在Clientrepo 中的文件,只存储了对它们的引用。这就是 git 子模块的强大之处。

请注意,在那之后,当您在Client其他地方克隆您的 repo 时,默认情况下不会获取其子模块。您必须使用git submodule update --init来初始化子模块。

另请注意,Server对子模块的引用指向它的特定版本。对 repo进行一些更改后,Server您可能想要转到Clientrepo,导航到子模块的目录(src/server在本示例中)并在repo中进行简单的git pull更改并提交更改。Client同样,不会有巨大的差异,只会提交对子模块的新引用。

作为带有子模块的 repo 的示例,您可以查看我的 Vim 设置目录的 repo:它的bundle文件夹中有许多插件,它们都是 git 子模块。GitHub 很好地展示了它们,如果它是 GitHub 托管的,则可以轻松地一键导航到子模块 repo。

PS 如果这一切与您想要的没有任何共同之处,而您只是想将一个文件夹Server添加到 repo Client,您可以复制Server到客户端通过删除目录中的所有 Git 痕迹Server(如果有的话)删除.git它。现在您只需拥有一个 repo,提交所有这些更改并继续。这样做的缺点是完全丢失了Server回购的历史——在项目的初始阶段这并不是一个很大的痛苦。

于 2013-01-21T16:09:41.917 回答
0

我认为,这不是 git 工作的方式。Git 需要一个存储库的根目录,所有要提交的文件夹和文件都必须在这个目录中。

于 2013-01-21T13:28:51.420 回答
0

使用以下命令克隆您现有的存储库:

git clone https://github.com/company/our_repo.git

手动将您的项目文件夹带到所需的位置,即trunk/bin

现在提交,然后使用以下命令推送 repo:

git commit -m "message"
git push origin master
于 2020-08-20T15:05:59.750 回答