【问题标题】:Git config using shell command使用 shell 命令进行 Git 配置
【发布时间】:2012-01-27 21:45:38
【问题描述】:

我有一个别名,它做一个简短的状态,用 sed 解析它,然后将文件添加到 git 的'assume-unchanged'索引。

但是,根据我对在 OS X bash 中转义单引号的理解,这个问题似乎是一个简单的问题。

irm = !sh -c 'git ignore $(git st --short -u | sed '\''/^ D/s/^ D//g'\'')'  

这是 gitconfig 中的完整行。我可以在 shell 中发出命令(使用 sh 和引号),但是当我尝试通过 git irm 运行它时,我得到了错误的 git config

根据以下建议,我对此进行了一些不同的配置。但是,它在 gitconfig 中仍然不起作用。所以我将此添加到我的~/.profile

alias irm="git ignore $(git st --short | grep '^ D' | sed 's/^ D //')"

【问题讨论】:

  • 那条 sed 行给我带来了一些麻烦。我想你正在寻找这个:sed -n -e "s/^D//gp"
  • 我想确保它只命中已删除的文件。应该排除 M A。

标签: macos git bash


【解决方案1】:

你应该可以使用双引号,但你必须将它们转义:

irm = !sh -c 'git ignore $(git st --short -u | sed \"s/^ D//\")'

您不需要选择该行,因为操作与选择相同。如果您只想输出匹配的行并排除任何其他行,您可能希望将 -npsed 一起使用,正如 Chris 在评论中所建议的那样。

此外,由于模式是锚定的,因此您不需要全局选项。

【讨论】:

  • 你在 gnu 上吗?我在 os x bash 上收到此错误: sh -c 'git st --short -u | sed \"s/^ D//\"' sed: 1: ""s/^": 无效命令代码"
  • @Drew:是的,我在使用 GNU。尝试不转义双引号。要尝试的另一件事是将整个别名用双引号括起来:irm = "!sh -c 'git ignore $(git st --short -u | sed \"s/^ D//\")'"。您也可以尝试省略sh -cgit ignore $(git st --short -u | sed \"s/^ D//\")。这些都适合我。
猜你喜欢
  • 1970-01-01
  • 2016-12-10
  • 2013-01-05
  • 2015-11-23
  • 2013-08-23
  • 2014-06-26
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多