将新项目添加到现有的github Repo

时间:2013-01-21 11:58:41

标签: git github commit repository

我正在开发一个Client-Server应用程序,我想在github上将两个项目(Client和Server)存储在同一个github repo中。 我在macosx上。 我使用Eclipse git插件为客户端项目创建了一个本地存储库,然后将其提交给github。它运作良好。

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

我试图在第一个创建一个新的回购,但它变得非常混乱,因为github无法理解哪个是主人。 我正在使用GitHub客户端应用程序来管理对远程仓库的提交。

有人可以帮助我吗?

由于

3 个答案:

答案 0 :(得分:2)

它可能没有直接回答你的答案,但我认为这种特殊情况可以用Git的这种特征来统治submodules

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

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

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

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

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

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

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

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

P.S。如果这一切与您想要的完全没有任何共同之处,并且您只想将文件夹Server添加到repo Client,则只需将Server复制到客户和< / strong>删除Server目录中的所有Git痕迹(如果有的话),删除其中的.git。现在你只需要一个仓库,提交所有这些更改并继续。这样做的缺点是完全丧失了Server回购的历史 - 在项目的初始阶段,这不是一个巨大的痛苦。

答案 1 :(得分:0)

我认为,这不是方法,git有效。 Git需要一个存储库的根目录,所有要提交的文件夹和文件必须位于这一个目录中。

答案 2 :(得分:0)

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

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

手动将您的项目文件夹移至所需位置,即“ trunk / bin”

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

git commit -m "message"
git push origin master