如何使用Git同时处理多个项目?

时间:2014-12-09 16:08:10

标签: git

目前我正在为一个使用Wordpress的客户创建一个网站,但在Wordpress中构建一个插件和主题,我将自己打包并重新发布。

我还会使用Git将网站推送到服务器。

过去,我使用ln -s将其他项目符号链接到主项目中。一个缺点是我必须单独推送它们。

还有其他什么方法?

3 个答案:

答案 0 :(得分:2)

为每个要分开分发的主题和插件创建一个存储库。

然后,在网站的存储库中,将其添加为submodules

使用子模块

git submodule add [clone url of your plugin]
git submodule add [clone url of your theme]

这将为每个子模块创建一个文件夹,其中的存储库内容就像克隆一样。

当你想"拉"您的子模块,执行:

git submodule update

处理子模块

请参阅the submodule documentation section with the same name

您可以直接从使用它们的项目进行更改,提交和推送子模块。只需cd进入子模块的目录,并像使用任何其他存储库一样使用它。

默认情况下,子模块处于detached head状态,进入子模块的目录并签出分支以获得正确的跟踪分支(稍后,当您想要更新子模块时,请使用{{ 1}}来自主存储库以避免再次分离git submodule update --remote --merge。然后在任何HEAD存储库中执行您的工作:

git

请注意" main" repository只存储它需要的子模块版本。因此,从主存储库的角度来看,您的子模块目前只是#34;在不同的版本中":

cd my_plugin
vim readme
git commit -m "Modified from main"
git push # Push the changes to the submodule's remote.

如果您希望项目使用新版本的子模块,请提交此项(这只会告诉主存储库它应该使用哪个版本的子模块)。

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   my_plugin (new commits)
    modified:   my_theme (new commits)

然后,无论你在哪里克隆主存储库:

git commit sub1 sub2 -m "Use newer version of plugin and theme"
git push

答案 1 :(得分:1)

您要求的内容称为Git Submodules

从链接页面:

  

假设您正在开发网站并创建Atom订阅源。您决定使用库,而不是编写自己的Atom生成代码。您可能不得不从CPAN安装或Ruby gem等共享库中包含此代码,或者将源代码复制到您自己的项目树中。包含库的问题在于难以以任何方式自定义库,并且通常更难以部署库,因为您需要确保每个客户端都具有该库。将代码存储到您自己的项目中的问题是,当上游更改可用时,您所做的任何自定义更改都很难合并。

     

Git使用子模块解决了这个问题。子模块允许您将Git存储库保存为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到项目中,并使您的提交保持独立。

更多:http://git-scm.com/book/en/v2/Git-Tools-Submodules。您还可以在Web上搜索Git子模块以查找大量教程。

答案 2 :(得分:0)

您可以使用submodules

这可能会有所帮助:git-submodules-adding-using-removing-and-updating