使用 GTWS 管理复杂的 Git 工作空间
GTWS 是一系列脚本,它使我们在开发环境中管理不同的项目和项目的各个版本变得很容易。
Great Teeming Workspaces(GTWS)是一个 Git 的复杂工作空间管理工具包,它使我们在开发环境中管理不同的项目和项目的各个版本变得很容易。
有点像 Python 的 venv,但不是为 Python 语言准备的。GTWS 用来管理多个项目的多个版本的工作空间。你可以很容易地创建、更新、进入和离开工作空间,每个项目或版本的组合(最多)有一个本地的 origin,用来与 upstream 同步 其余的所有工作空间都从本地的 origin 更新。
${GTWS_ORIGIN}/ project / repo [/ version ] ${GTWS_BASE_SRCDIR}/ project / version / workspacename /{ repo [, repo ...]}
源代码目录的每一级(包括全局的家目录)可以包含一个 .gtwsrc 文件,这个文件中维护与当前级相关的设置和 bash 代码。每一级的配置会覆盖上一级。
用下面的命令检出 GTWS:
git clone https://github.com/dang/gtws.git
配置你的 ${HOME}/.gtwsrc。它应该包含 GTWS_ORIGIN,也可以再包含 GTWS_SETPROMPT。
把仓库目录加到环境变量中:
export PATH="${PATH}:/path/to/gtws
通过级联 .gtwsrc 文件来进行配置。它从根目录向下遍历,会执行在每级目录中找到的 .gtwsrc 文件。下级目录的文件会覆盖上一级。
在你最上层的文件 ~/.gtws/.gtwsrc 中进行如下设置:
GTWS_BASE_SRCDIR:所有项目源文件目录树的基目录。默认为 $HOME/src。 GTWS_ORIGIN: 指定 origin git 目录树的路径。默认为 $HOME/origin。 GTWS_SETPROMPT: 可选配置。如果配置了这个参数,shell 提示符会有工作空间的名字。 GTWS_DEFAULT_PROJECT: 不指定项目或项目未知时默认的项目名。如果不指定,使用命令行时必须指明项目。 GTWS_DEFAULT_PROJECT_VERSION: 检出的默认版本。默认为 master。在每个项目的根目录进行以下设置:
GTWS_PROJECT: 项目的名字(和基目录)。 gtws_project_clone: 这个函数用于克隆一个项目的指定版本。如果未定义,它会假定项目的 origin 对每一个版本都有一个单独的目录,这样会导致克隆一堆 Git 仓库。 gtws_project_setup: 在克隆完所有的仓库后,可以选择是否调用这个函数,调用后可以对项目进行必要的配置,如在 IDE 中配置工作空间。在项目版本级进行以下设置:
GTWS_PROJECT_VERSION: 项目的版本。用于正确地从 origin 拉取代码。类似 Git 中的分支名字。下面这些参数可以在目录树的任意地方进行配置,如果能生效,它们可以被重写多次:
GTWS_PATH_EXTRA: 这些是工作空间中加到路径后的额外的路径元素。 GTWS_FILES_EXTRA: 这些是不在版本控制内,但应该在工作空间中被检出的额外的文件。这些文件包括 .git/info/exclude,每个文件都与仓库的基目录相关联。 origin 目录GTWS_ORIGIN (大部分脚本中)指向拉取和推送的原始 Git 检出目录。
${GTWS_ORIGIN} 部署:
/ project 这是一个项目的仓库的基目录。 如果指定了 gtws_project_clone,你可以配置任意的部署路径。 如果没有指定 gtws_project_clone,这个路径下必须有个名为 git 的子目录,且 git 目录下有一系列用来克隆的裸 Git 仓库。工作流示例
假设你有一个项目名为 Foo,它的 upstream 为 github.com/foo/foo.git。这个仓库有个名为 bar 的子模块,它的 upstream 是 github.com/bar/bar.git。Foo 项目在 master 分支开发,使用稳定版本的分支。
为了能在 Foo 中使用 GTWS,你首先要配置目录结构。本例中假设你使用默认的目录结构。
配置你最上层的 .gtwsrc: cp ${GTWS_LOC}/examples/gtwsrc.top ~/.gtwsrc 根据需要修改 ~/.gtwsrc。mkdir -p ~/src/foo
cp ${GTWS_LOC}/examples/gtwsrc.project ~/src/foo/.gtwsrc
mkdir -p ~/src/foo/master
cp ${GTWS_LOC}/examples/gtwsrc.version ~/src/foo/master/.gtwsrc
cd ~/src/foo/master/tmp
git clone --recurse-submodules git://github.com/foo/foo.git
cd foo
gtws-mirror -o ~/origin -p foo(译注:这个地方原文有误,不加 -s 参数会报错)
到现在为止,Foo 的 master 分支的工作可以结束了。假设你现在想修复一个 bug,名为 bug1234。你可以脱离你当前的工作空间为修复这个 bug 单独创建一个工作空间,之后在新创建的工作空间中开发。
上面的命令创建了 bug1234/,在这个目录下检出了 Foo(和它的子模块 bar),并创建了 build/foo 来构建它。
上面的命令在 bug1234 工作空间中开启了一个子 shell。这个 shell 有 GTWS 的环境和你在各级 .gtwsrc 文件中设置的环境。它也把你工作空间的基目录加入到了 CD,因此你可以从 base 路径 cd 到相关的目录中。
现在你可以修复 bug1234 了,构建、测试、提交你的修改。当你可以把代码推送到 upstream 时,执行下面的命令:
cd foo
wspush
wspush 会把代码推送到与你工作空间相关的分支 先推送到本地的 origin,再推送到 upstream。
上面的命令调用了 GTWS 的 git-sync 脚本,会从本地 origin 更新代码。使用下面的命令来更新本地的 origin:
git sync -o
上面的命令会更新你本地的 origin 和子模块的镜像,然后用那些命令来更新你的检出仓库的代码。git-sync 也有一些其他的很好的工鞥。
你可以在任何时间重复进入工作空间,也可以在同一时间在相同的工作空间中开多个 shell。
还有一个脚本 tmws 使用 tmux 进入工作空间,能创建一系列的窗口/窗格,这完美契合我的工作流。你可以根据你自己的需求来修改它。
via: https://opensource.com/article/20/2/git-great-teeming-workspaces
作者:Daniel Gryniewicz 选题:lujun9972 译者:lxbwolf 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/49162.html
linuxpythonshell相关文章
- 分布式版本控制 Git 最佳实践(一)
- 通过pycharm使用git[图文详解][通俗易懂]
- git初次登陆使用
- Git的使用教程
- Git分支管理使用规范
- python操作gitlab_git的使用教程
- git命令拉远程分支到本地_git强行切换分支
- git拉取代码如何解决冲突_Git工具-git pull拉取代码时冲突的解决办法[通俗易懂]
- git restore 放弃更改、取消暂存
- 科学使用git版本控制
- 【Git】IDEA使用Git(完)
- 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
- 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )
- 【错误记录】Git 使用报错 ( git: ‘switch‘ is not a git command. See ‘git --help‘. )
- 【Git】Git 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )
- 【Git】Git 分支管理 ( 使用 git cherry-pick 命令提取提交记录应用于当前分支 | 创建新分支应用某个提交 | git cherry-pick 冲突处理 )
- Git 2.40 发布,包括 git jump 工具的更新、cat-file 工具的增强以及提高 Windows 上响应速度
- git添加新用户详解程序员
- Git 介绍与使用详解
- 使用Git来升级你的Linux系统(git升级linux)
- 仓库如何使用Git在Linux下管理远程仓库(linuxgit远程)
- 安装Git服务器:在Linux环境下的步骤(linux安装git服务器)
- 初学者指南:在 Ubuntu Linux 上安装和使用 Git 和 GitHub
- Git 中的那些可怕的事
- 实现快速部署:使用Git管理Linux服务器(gitlinux服务器)