【问题标题】:How to loop git status using scripting如何使用脚本循环 git 状态
【发布时间】:2020-07-02 02:25:21
【问题描述】:

我需要帮助:

我想在一行中循环不带状态码或一起状态码的 git 状态码;我正在使用下面的代码:

# file.sh
files=$(git status --porcelain)
for file in $files; do
    echo $file
done

# OUTPUT
M
example_folder/example_file
M
example_folder_1/example_file_1
M
example_folder_2/example_file_2
....

问题是状态码总是显示,我需要把状态码去掉或者像这样放在一起:

# LINES EXPECTED
M example_folder/example_file
M example_folder_1/example_file_1
# OR
example_folder/example_file
example_folder_1/example_file_1

我的目标是使用控制台输出输入,如下所示:

files=$(git status --porcelain)
for file in $files; do
    echo $file
    git add $file
    read -p "enter a comment: " comments
    git commit -m "${comments}"
done

上面的代码可以运行,但是状态码也收到了注释,我需要在每修改一行时删除或放在一行中。

问候。

【问题讨论】:

    标签: git scripting git-status


    【解决方案1】:

    --porcelainShort Format 中显示结果。

    在短格式中,每个路径的状态显示为这些形式之一

    XY PATH
    XY ORIG_PATH -> PATH
    

    第二种格式发生在ORIG_PATH 重命名为PATH 时。使用awk 获取PATH

    files=$(git status --porcelain | awk '{print $NF}')
    for file in $files; do
        echo $file
        git add $file
        read -p "enter a comment: " comments
        git commit -m "${comments}" -- ${file}
    done
    

    【讨论】:

      【解决方案2】:

      你想这样写:

      #!/bin/sh
      
      files=$(git status --porcelain | cut -b4-)
      for file in $files; do
          echo $file
          git add $file
          read -p "enter a comment: " comments
          git commit -m "${comments}"
      done
      

      cut -b4- 修剪输出的状态部分。

      【讨论】:

        猜你喜欢
        • 2013-03-12
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多