GTWS是一系列的脚本,可以让我们在开发环境中轻松管理不同的项目和不同版本的项目。GreatTeemingWorkspaces(GTWS)是一个复杂的Git工作区管理工具包,可以让我们在开发环境中轻松管理不同的项目和项目的版本。有点像Python的venv,但不是Python语言。GTWS用于管理多个项目的多个版本的工作区。您可以轻松地创建、更新、进入和离开工作区,并且每个项目或版本组合(最多)有一个本地源,用于与上游同步——所有其他工作区都从本地源更新。部署${GTWS_ORIGIN}//[/]${GTWS_BASE_SRCDIR}////{[,...]}每个级别的源目录(包括全局主目录)都可以包含一个.gtwsrc文件,该文件维护与当前级别相关的设置和bash代码。每个级别的配置都会覆盖上一个级别。要安装检查GTWS,请使用:gitclonehttps://github.com/dang/gtws.git配置你的${HOME}/.gtwsrc。它应该包含GTWS_ORIGIN和可选的GTWS_SETPROMPT。将仓库目录添加到环境变量中:exportPATH="${PATH}:/path/to/gtws配置是通过级联.gtwsrc文件进行配置的,从根目录向下遍历,会在每一级执行directory找到的.gtwsrc文件,下级目录下的文件会覆盖上级目录,在你的顶层文件~/.gtws/.gtwsrc中设置如下设置:GTWS_BASE_SRCDIR:所有项目源文件目录的基目录trees.默认是$HOME/src.GTWS_ORIGIN:指定origingit目录树的路径.默认是$HOME/origin.GTWS_SETPROMPT:可选配置。如果配置了这个参数,shell提示符将有工作空间的名称。GTWS_DEFAULT_PROJECT:未指定项目或项目未知时的默认项目名称。如果不指定,使用命令行时必须指定项目。GTWS_DEFAULT_PROJECT_VERSION:要签出的默认版本。默认是主控。在每个项目的根目录下进行以下设置:GTWS_PROJECT:项目的名称(和基本目录)。gtws_project_clone:该函数用于克隆一个项目的指定版本。如果未定义,它会假定项目的来源对于每个版本都有一个单独的目录,这会导致克隆一堆Git存储库。gtws_project_setup:克隆完所有repositories后,可以选择是否调用该函数。调用后可以对项目进行必要的配置,如在IDE中配置工作区。以下设置是在项目版本级别进行的:GTWS_PROJECT_VERSION:项目的版本。用于正确地从源中提取代码。类似于Git中的分支名称。以下参数可以在目录树中的任何位置配置,如果有效,可以多次覆盖它们:GTWS_PATH_EXTRA:这些是添加到工作区路径中的额外路径元素。GTWS_FILES_EXTRA:这些是不受版本控制的额外文件,但应在工作区中签出。这些文件包括.git/info/exclude,每个都与存储库的基本目录相关联。源目录GTWS_ORIGIN(在大多数脚本中)指向用于拉取和推送的原始Git签出目录。${GTWS_ORIGIN}Deployment:/这是项目存储库的基本目录。如果指定了gtws_project_clone,则可以配置任意部署路径。如果不指定gtws_project_clone,则该路径下必须有一个名为git的子目录,并且该git目录下必须有一系列用于克隆的裸Git仓库。示例工作流假设您有一个名为Foo的项目,其上游为github.com/foo/foo.git。这个存储库有一个名为bar的子模块,其上游是github.com/bar/bar.git。Foo项目在master分支上开发,使用该分支的稳定版。为了在Foo中使用GTWS,首先需要配置目录结构。此示例假定您使用的是默认目录结构。配置您的顶级.gtwsrc:cp${GTWS_LOC}/examples/gtwsrc.top~/.gtwsrc根据需要修改~/.gtwsrc。创建顶层目录:mkdir-p~/origin~/src创建并配置项目目录:mkdir-p~/src/foocp${GTWS_LOC}/examples/gtwsrc.project~/src/foo/.gtwsrc修改为需要~/src/foo/.gtwsrc。创建并配置主版本目录:mkdir-p~/src/foo/mastercp${GTWS_LOC}/examples/gtwsrc.version~/src/foo/master/.gtwsrc修改~/src/foo/master/。gtwsrc.进入发布目录并创建一个临时工作区来配置镜像:mkdir-p~/src/foo/master/tmpcd~/src/foo/master/tmpgitclone--recurse-submodulesgit://github。com/foo/foo.gitcdfoogtws-mirror-o~/origin-pfoo和~/origin/foo/submodule/bar.git。未来的克隆操作将从这些来源而不是上游克隆。现在可以删除工作区。现在,Foo的master分支上的工作可以完成了。假设您现在想要修复一个名为bug1234的错误。你可以脱离你当前的工作空间,创建一个单独的工作空间来修复这个bug,然后在新创建的工作空间中开发。进入version目录,新建工作空间:cd~/src/foo/mastermkwsbug1234上面的命令创建了bug1234/,在该目录下检出Foo(及其子模块bar),并创建build/foo进行构建。进入工作区有两种方法:cd~/src/foo/master/bug1234startws或cd~/src/foo/master/startwsbug1234上面的命令在bug1234工作区启动一个子shell。此shell具有GTWS环境和您在各种级别的.gtwsrc文件中设置的环境。它还将工作区的基本目录添加到CD,因此您可以从基本路径cd到相关目录。现在您可以修复bug1234,构建、测试和提交您的更改。当您可以将代码推送到上游时,执行以下命令:cdfoowspushwspush会将代码推送到与您的工作空间相关的分支-先推送到本地origin,然后再推送到上游。当上游修改后,可以使用如下命令同步到本地:gitsync上面的命令调用了GTWS的git-sync脚本,会从本地源更新代码。使用以下命令更新您的本地源:gitsync-o上面的命令将更新您的本地源和子模块镜像,然后使用这些命令更新您签出的存储库中的代码。git-sync还有一些其他不错的工具。当你想结束工作区的工作时,直接退出shell:exit可以随时重新进入工作区,也可以在同一个工作区同时打开多个shell。当你不需要一个工作空间时,你可以使用rmws删除它,或者直接删除它的目录树。还有一个脚本tmws,它使用tmux进入工作区并创建一系列窗口/窗格,非常适合我的工作流程。您可以根据自己的需要进行修改。