如何处理git别名的组合 以前的尝试

问题描述

问题

我在.gitconfig中定义了三个git别名(使用外部bash脚本定义了称为diff-lines函数):

<%= form_with(model: project,:html => {:id => 'project-form-validation'},local: true) do |form| %>

<div class="row select-date-wrapper">
  <div class="field columns large-6">
    <%= form.label :project_name,:class=>"required" %>
    <%= form.text_field :project_name %>
  </div>

  <div class="field columns large-2">
    <%= form.label :from_date,:class=>"required" %>
    <%= form.text_field :from_date,class: 'datepicker',readonly: 'true' %>
  </div>

  <div class="field columns large-1"></div>

  <div class="field columns large-2">
    <%= form.label :to_date,:class=>"required" %>
    <%= form.text_field :to_date,readonly: 'true' %>
  </div>

  <div class="field columns large-1"></div>
</div>

<div class="row">
  <div class="actions columns button-right">
    <br>
    <%= form.submit :class => "button primary" %>
  </div>
</div>
<% end %>

如何定义'diffln',以便可以告诉我要使用的diff别名的版本?

我正在寻找某种方法来防止我必须定义类似于以下内容的每个版本:

    [alias]
        diffc = diff --cached
        diffnw = diff -w --ignore-cr-at-eol --ignore-all-space
        diffln =!bash -c 'source $HOME/.bash_functions/diff-lines && git diff | diff-lines'

解决方

感谢@KamilCuk提供解决方案。我需要在别名后面添加一些内容/东西,还要将整个别名用双引号引起来。

完整的工作命令是这样(如果没有提供参数,认选项是使用git diff):

    diffcln =!bash -c 'source $HOME/.bash_functions/diff-lines && git diffc | diff-lines'
    diffnwln =!bash -c 'source $HOME/.bash_functions/diff-lines && git diffnw | diff-lines'
    diffcnwln =!bash -c 'source $HOME/.bash_functions/diff-lines && git diffnw --cached | diff-lines'
    etc...

以前的尝试

我已经尝试过了:
diffln ="!bash -c 'source $HOME/.bash_functions/diff-lines && if ((!$#)); then set -- diff; fi && git $@ | diff-lines' _"
并通过以下方式调用
diffln =!bash -c 'source $HOME/.bash_functions/diff-lines && git $@ | diff-lines' 但这给了我认的git选项,就好像我只是打电话给$ git diffln diffc

解决方法

在其后添加一些内容。通常:bash -c "blabla" _bash -c "balbla" --

bash -c "" <here>之后的第一个参数是$0-第二个参数是$1

还请记住有关引号的信息-将$anything放在双引号中以防止单词分裂和文件名扩展。但是我不确定git是如何处理的。

diffln =!bash -c 'source "$HOME/.bash_functions/diff-lines" && git "$@" | diff-lines' _

如果要使用“默认”参数,可以:

diffln =!bash -c 'source "$HOME/.bash_functions/diff-lines" && if ((!$#)); then set -- diff; fi && git "$@" | diff-lines' _