我正在开发一个Client-Server应用程序,我想在github上将两个项目(Client和Server)存储在同一个github repo中。 我在macosx上。 我使用Eclipse git插件为客户端项目创建了一个本地存储库,然后将其提交给github。它运作良好。
现在我想在新的子文件夹中添加此Repo服务器端项目。此部件是在与客户端部件不同的工作空间上开发的。我尝试使用Eclipse共享项目,但它告诉我没有现有的repo。我认为这是因为系统的两个部分是使用不同的Eclipse IDE开发的。
我试图在第一个创建一个新的回购,但它变得非常混乱,因为github无法理解哪个是主人。 我正在使用GitHub客户端应用程序来管理对远程仓库的提交。
有人可以帮助我吗?
由于
答案 0 :(得分:2)
它可能没有直接回答你的答案,但我认为这种特殊情况可以用Git的这种特征来统治submodules。
在这种情况下,无论如何,您需要在某处托管两个不同的存储库。但是在子模块的帮助下,你可以告诉Git,一个repo的文件应位于另一个目录树的中。没有引起你描述的混乱!
例如,假设您将项目托管为github.com/user/Client
和github.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