强制“git status”在终端上输出颜色(在脚本内)

2024-04-01

EDIT:

我想提出一个建议:解析颜色通常是一个考虑不周的想法。

我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它。这是……好吧,但使用瓷器或类似的东西并自己重新构建彩色部件可能会更明智!

原始问题如下。


我喜欢看到颜色,因为我的脚本足够强大(到目前为止)来处理颜色代码。看起来我确实违背了这里的原则,但老实说,我不明白必须解析脚本中的转义码之类的东西有什么大不了的。如果颜色有助于交互使用,为什么它们不能帮助脚本使用,因为我可能会聚合数据并处理比手动处理更多的数据?颜色岂不是更重要的是?

不管怎样,我有一个简洁的 shell 脚本,是我写的 mungesgit status输出,我只是想让这个脚本保持颜色完整。我的全局 git 配置已设置,以便已更改和未跟踪的文件列表在 git 状态中以颜色显示。不幸的是不像git diff没有强制颜色的选项git status我能找到的。

很清楚地讲,这就是问题所在:

$ git status

产生完美的输出,但是(以下是我的脚本的摘录)

git status | sed "s/^#/\x1b[34m#[0m/"

不产生有色的git status输出,您甚至可以在这里看到我显式地将前导哈希字符转换为蓝色,因为它有助于突出显示脚本输出的不同区域。

有谁知道如何让它发出颜色吗?是否有一个标准程序可以用作“假终端”STDIN/STDOUT 管道?事实上,我也在开发 pty 伪终端工具,所以我当然可以将其用于此目的,但这是一个相当严厉的解决方案(尚未准备好使用,因为我还没有完成构建它)。


为了避免更改 git 配置,您可以通过传递配置变量来仅为当前命令启用颜色-c.

For the status命令,变量是color.status:

    git -c color.status=always status | less -REX

For diff, show, log and grep命令,变量是color.ui:

    git -c color.ui=always diff | less -REX

注意-c必须来before the status or diff争论,而不是之后。

或者,对于diff, show, log and grep命令,您可以使用--color=always after命令:

    git diff --color=always | less -REX

注意:正如史蒂文所说,如果您尝试提取有意义的数据,那么您可以使用而不是解析颜色来提取含义--porcelain以获得更适合解析器的输出。

    git status --porcelain | awk ...

然后,如果您愿意,可以稍后重新引入颜色。

要获取用户配置的颜色,您可以使用git config --get-colour:

    reset_color="$(tput sgr0)"
    remote_branch_color="$(git config --get-color color.branch.remote white)"

    echo "Pushing to ${remote_branch_color}${branch_name}${reset_color}"

更多例子here https://github.com/joeytwiddle/dotfiles/blob/3081c5d034c6c11907b9b290d97f815848fceb68/j/config/auto.sh/git_aliases#L1430-L1432.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制“git status”在终端上输出颜色(在脚本内) 的相关文章

  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex
  • 返回到存储库中的特定修订后提交并推送更改?

    我们需要及时返回到某个特定的提交 一些意外的改变是为了掌握 尝试恢复它挖得太深 所以 master 的状态很糟糕 现在我们希望master回到66ada4cc61d62afc 根据git 恢复到某个提交 https stackoverflo
  • Eclipse 与外部 src 和 Web 内容文件夹链接或映射

    首先这不是问题但是我遇到的问题的解决方案浪费了4 5个小时来找到解决方案 请让我知道是否有更好的替代方法来使用 eclipse 项目管理外部 src 文件夹 我正在使用版本控制系统 GIT 来管理我的项目 还使用外部 Git 客户端 Sou
  • 向上移动箭头不突出显示文本 emacs iterm2

    我最近有人帮忙修复M left等等 终端元箭头键绑定中的 emacs https stackoverflow com questions 10867199 emacs in terminal meta arrow keybindings 但
  • git checkout 到分支需要很长时间

    我使用的是 Ubuntu 17 10 并且使用 git 版本 2 14 1 每当我从 master 创建一个分支并尝试签出它 或从它签出到 master 时 都会花费大量时间 大约几分钟 有时接近 10 分钟 确实 我有几 GB 的数据 但
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 如何解决 VS Code 中变基拉取的合并冲突?

    当我做一个git pull rebase 并且我的提交中存在合并冲突 我得到冲突差异视图 解决所有冲突并暂存文件 然后呢 我可以打开终端并运行git rebase continue但是 VS Code 中不应该有一个按钮来完成变基吗 只需使
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 在 Azure DevOps 中为 Wix MSI 文件生成 GUID

    我正在为 Web 服务器应用程序和 Sitecore 前端应用程序设置 Wix 安装程序 我的问题并非特定于 Web 服务器或 Sitecore 我的问题是 Wix 以及如何使用它进行持续交付 1 Wix 需要每个文件和产品本身的 GUID
  • 如何关闭分支而不将其从 git 的历史记录中删除?

    我想提交并关闭其分支 而不将其从历史中删除 有了水银我会commit close branch then update转到上一个 然后继续工作 有了 git 我很困惑 没有与 Git 中关闭分支完全相同的方法 因为 Git 分支比 Merc
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 如何将 .php 文件上传到 Heroku

    我需要将 php 文件上传到我的 Heroku 网站 这是如何使用终端完成的 我已登录终端并可以看到我的应用程序等 谢谢你的帮助 如果您需要通过终端在 Heroku 应用程序上上传文件 您需要跟踪它并使用Git 安装并配置 heroku 工
  • 就空间而言最快的方法——用Python找到素数

    也许这是一个愚蠢的问题 但我想知道你是否可以提供用Python查找素数的最短来源 我还想知道如何使用 map 或 filter 函数查找素数 谢谢 编辑 当我说最快 最短时 我的意思是使用较少字符 单词的方式 无论如何 不 要考虑竞争 我想
  • 有没有办法强制 Gerrit 将分支中的所有提交推送到代码审查?

    Gerrit 将合并提交历史记录中较早且位于存储库的不同 分支 中的潜在未经审核的更改 这是一个例子 结账 gerrit 分支devel 创建file1 txt 添加 提交 推送到refs heads temp branch 创建file2
  • 我在运行 flutter create my_appName 时收到以下错误:“my_appName”不是有效的 Dart 包名称

    我尝试过将flutter升级到最新版本 我仍然遇到同样的错误 我遇到了完全相同的错误 按照 Flutter 团队附加的命名约定重命名我的工作目录后here https dart lang github io linter lints pac
  • 自动将提交消息附加到 Git 中提交的文件

    我的目标是在存储库中每个文件的末尾维护所有提交历史记录 消息的日志 我使用 commit msg 挂钩来获取提交消息 准备它并将其附加到文件中 但是 我注意到由于文件在暂存后发生了更改 因此 git status 仍然显示为已修改 执行此操
  • 在 MVVM Android 中使用共享首选项的最佳实践?

    我一直在寻找在 Android 的 MVVM 架构中使用共享首选项的最佳方法 但我只能找到一些片段 因此没有清晰的图像来以最佳方式做到这一点 因此我有几个问题 我应该在应用程序上保留 SharedPrefs 的单例实例吗 ViewModel
  • 更改 HTML 数据列表自动完成行为

    我正在尝试为我正在开发的网站实现搜索自动完成功能 我正在使用 HTML 数据列表 其中的选项是从后端 MySQL 数据库动态生成的 与 AJAX 通信 但是 数据列表自动完成功能并不像我想要的那样工作 如果关键字不按顺序排列 自动完成功能似
  • 将Admob集成到Android问题

    我正在尝试将 Admob 集成到 android 但最终没有成功 该文档说需要提供 DeviceID 才能获取真实设备的广告 您能帮我解决这个问题吗 但我通过设置 AdManager TestEmulator 在模拟器中获取广告 使用 Ad
  • Common Lisp 中重置状态

    新手 Common Lisp 问题在这里 有没有办法重置环境状态 我的意思是 是否有一些命令可以使 REPL 恢复到启动后的相同状态 即取消所有变量 函数等 或者如果这不在 Common Lisp 标准中 是否有一些扩展在 SBCL 我使用
  • 来自 Yelp API 的错误请求

    灵感来自这个 Yelp 教程 https github com Yelp yelp api blob master v2 python sample py 我创建了一个脚本来搜索给定城市的所有健身房 我调整了脚本这些更新 http www
  • 将可变参数传递给 printf [重复]

    这个问题在这里已经有答案了 我想要一个辅助功能log它主要执行以下操作 log file array has d elements n 10 writes 2014 02 03 16 33 00 array has 10 elements
  • 按名称从数据框中删除列[重复]

    这个问题在这里已经有答案了 可能的重复 从 R 中的 data frame 中删除整列 https stackoverflow com questions 6286313 remove an entire column from a dat
  • 等待异步方法在 for 循环中完成

    我有一个包含三个异步方法的for循环 我想在这3个异步方法完成后进行一些处理 void getAllUsersInformations dispatch async dispatch get global queue DISPATCH QU
  • 从外部访问 while 循环内部的变量(C#)?

    我是 C 新手 我试图从这段时间起达到 MAX 的价值 这样我就可以在外面使用它 但我不能 任何人都有一些想法 提前致谢 while Condition Double MAX somecode Console WriteLine The O
  • 如何识别网站中的慢速设备?

    当为移动设备调整网页时 我总是依赖 CSS 媒体查询 最近我不再只担心屏幕尺寸 还担心许多移动设备的 javascript 引擎 一些依赖于窗口滚动或快速 DOM 转换序列的常见 javascript 效果在慢速设备上效果非常糟糕 有没有办
  • 需要解释为什么 RecyclerView.Adapter.notifyItemChanged(int position, Object Payload) 和我绑定的有效负载参数是对象列表

    RecyclerView Adapter notifyItemChanged intposition Objectpayload 其中payload是将传递给RecyclerView Adapter onBindViewHolder VHh
  • BackgroundWorker - Cancellation Pending 在 RunWorkerCompleted 中更改为 false。为什么?

    取消BackGroundWorker后 在DoWork中 CancellationPending为true 但是当他来到RunWorkerCompleted时 CancellationPending为false 我不知道我做错了什么 sta
  • 在运行时检测字节序有什么好处?

    我搜索了宏来确定机器上的字节顺序 但没有找到任何标准的处理器宏 但很多解决方案在运行时执行此操作 为什么我应该在运行时检测字节序 如果我这样做 ifdef LITTLE ENDIAN inline int swap int x do swa
  • Python Atom API:使用字典时如何设置atom var

    The Atom api https pypi python org pypi atom 0 3 6是Enaml用来实现MVC的库 更改一个原子变量 UI 就会更新 在 UI 中更改它 您的模型就会更新 我想将 Atom var 在本例中为
  • 强制“git status”在终端上输出颜色(在脚本内)

    EDIT 我想提出一个建议 解析颜色通常是一个考虑不周的想法 我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它 这是 好吧 但使用瓷器或类似的东西并自己重新构建彩色部件可能会更明智 原始问题如下 我喜欢看到颜色 因为我的脚本足够