【问题标题】:How to parametrize git checkout using bash script如何使用 bash 脚本参数化 git checkout
【发布时间】:2016-10-12 10:54:51
【问题描述】:

我有一个共享多个版本的项目目录,我尝试创建简单的脚本来检查每个模块的正确版本,配置是单独的文件(2.6 就是其中之一)。

配置文件如下:

<module_name1> <branch_name1>
<module_name2> <branch_name2>

脚本:

编辑

while read path branch;
do
  cd $path
  echo
  echo $path
  echo "$branch"
  git checkout "$branch"
  cd ..
done < 2.6

不幸的是 git 似乎无法识别以这种方式传递的分支名称导致错误:

' 与 git 已知的任何文件都不匹配。

我想要一个建议,我该如何修复这样的脚本,或者以其他方式创建它?

(或者可能是一些可配置的批量结账工具?...)

编辑:

经过一些测试,似乎 git 认为 '$branch' 传递的值是一个空字符串(我之前用 echo 检查过它的内容)

【问题讨论】:

  • 手动调用'echo git checkout "$branch"'打印的值可以正常工作,所以解决git手动传递的参数是个问题

标签: git bash parameter-passing


【解决方案1】:

显然以这种方式从单独的文件中读取变量,通过添加回车符来破坏它们,因此它在修剪后开始工作。

(更糟糕的是,它损坏了回显输出,我只是在将其结果流式传输到另一个文件而不是控制台后才发现它)

修复: 分支=$(echo "${branch//[$'\t\r\n ']}")

【讨论】:

    【解决方案2】:

    你应该看看git submodules

    【讨论】:

    • 不幸的是,它不适用于我公司的 Gerrit 基础架构/允许访问
    【解决方案3】:

    利用read的能力将输入行拆分成多个变量:

    while read path branch; do
      cd "$path"
      git checkout "$branch"
      ...
    

    【讨论】:

    • 嗯,这缩短了脚本,但参数本身已正确传递(我已经通过调用'echo git checkout "$branch"'检查了这一点)实际传递似乎有问题所述参数的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2021-03-05
    • 2016-10-06
    • 2021-05-17
    • 2018-04-30
    相关资源
    最近更新 更多